Laravel 中关联模型查询 +with 预加载中 select 必需字段
在用laravel开发时,要关联模型查询和with预加载做统计。因为是统计所以并没有全部查出所有字段的必要。故我在with中用闭包 $query->select('字段名’');但是在查询后结果是null。也就是说关联不上。
为什么呢?我终于在网上找到答案:不管一对一,一对多等等,laravel的关联查询的原理简单来说就是先分别查出模型自身的数据和关联模型的数据,在根据你定义的主键id和外键_id进行关联起来组成查询结果。所以呢,模型自身的数据在select时的必需字段必须要有定义关联是的主键id(或自定义的关联字段),同样,关联模型的数据在select时的必需字段也要有定义关联时的外键_id(或自定义的关联字段).
在with中用闭包时 $query->select('自已想要的字段名'. '定义的关联字段_id');模型自身在->select('至少要有关联的字段id');
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
举个栗子:
表Role , 表User ;表字段:age,name
Role外键user_id,User主键是id;
Role模型里关联函数是这样: return $this->hasmany(User::class, 'user_id', 'id');
在查询Role内容并关联User表查询时:
不能这样:
$query->select(‘age, 'name');
应该这样:
$query->select('id',‘age, 'name');
要把关联查询表的主键带上。
谢谢,刚碰到这个问题
遇到了同样的问题 看了好多文章都没楼说的清晰 一目了然 赞
感谢大佬
我也踩坑了
在with里能用 join吗?用了也不会报错,在with里面用了join,然后select 显示 join 里面的字段就会报错,字段找不到