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 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 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');

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

5年前 评论

谢谢,刚碰到这个问题

5年前 评论

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

4年前 评论

感谢大佬

4年前 评论

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

2年前 评论