Laravel中eager loading的with语句选特定字段时不返回关联数据问题
问题原因
Laravel 的 预加载(Eager Loading) 机制需要依赖主表和关联表的关联键完成二次查询匹配,你没有在select中包含关联需要用到的主键字段,导致预加载逻辑无法匹配到对应的关联数据:
- 你定义的
Admin模型和roles的关联,依赖admins表的主键(通常为id)作为关联键 - 你仅选择了
username和email字段,缺失了关联必需的id字段,预加载查询拿到的roles数据无法和现有Admin记录做匹配,最终返回空数组。
解决方法
在select中补充关联需要用到的主键字段即可:
Route::get('/admins', function () { return Admin::select(['id', 'username', 'email'])->with('roles')->get(); });
如果是其他关联类型(比如反向关联、多对多),只需要确保
select中包含当前模型用于关联的键字段即可,多对多关联无需额外添加中间表字段,预加载会自动通过中间表完成匹配。
内容的提问来源于stack exchange,提问作者Gunaraj Khatri
相关产品推荐
相关产品推荐

