Laravel 中关联模型查询 +with 预加载中 select 必需字段

在用laravel开发时,要关联模型查询和with预加载做统计。因为是统计所以并没有全部查出所有字段的必要。故我在with中用闭包 $query->select('字段名’');但是在查询后结果是null。也就是说关联不上。
为什么呢?我终于在网上找到答案:不管一对一,一对多等等,laravel的关联查询的原理简单来说就是先分别查出模型自身的数据和关联模型的数据,在根据你定义的主键id和外键_id进行关联起来组成查询结果。所以呢,模型自身的数据在select时的必需字段必须要有定义关联是的主键id(或自定义的关联字段),同样,关联模型的数据在select时的必需字段也要有定义关联时的外键_id(或自定义的关联字段).
在with中用闭包时 $query->select('自已想要的字段名'. '定义的关联字段_id');模型自身在->select('至少要有关联的字段id');

本作品采用《CC 协议》,转载必须注明作者和本文链接
一切皆自学
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

举个栗子:
表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');

要把关联查询表的主键带上。

4年前 评论

谢谢,刚碰到这个问题

4年前 评论

遇到了同样的问题 看了好多文章都没楼说的清晰 一目了然 赞

4年前 评论

感谢大佬

3年前 评论

在with里能用 join吗?用了也不会报错,在with里面用了join,然后select 显示 join 里面的字段就会报错,字段找不到

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!