Laravel预加载时查询主表指定列关联返回空,如何获取两张表指定列?
解决方案
核心原因
Laravel 的预加载(with)采用分两次查询的实现逻辑:先查询主表数据,提取所有关联匹配需要用到的键值(通常是主表主键),再用这批键值作为查询条件查询关联表,最后将关联数据匹配绑定到对应的主表记录上。
主表查询时未包含关联需要的主键、关联表查询时未包含和主表匹配的外键,会导致预加载完成后无法完成数据匹配,最终返回空数组。
修正代码
$users = User::select('id', 'name') // *必须包含关联匹配需要的主表主键 id* ->with(['role_user' => function($query) { $query->select('user_id', 'role_name'); // *必须包含和主表匹配的外键 user_id* }]) ->paginate(3);
补充说明
- 如果是多对多关联,按需添加其他需要的 pivot 字段即可,只要保证关联匹配用的外键被选中,预加载就可以正常工作
- 全程不需要使用 join 操作,符合你的需求
内容的提问来源于stack exchange,提问作者Sajjad Ali
相关产品推荐
相关产品推荐

