Laravel/Eloquent使用with关联查询自定义字段遇空值问题求助
解决Laravel关联查询中关联数据为null的问题
嘿,这个问题我之前踩过一模一样的坑!其实根源很简单:当你用select()手动指定父模型的查询字段时,必须把关联关系依赖的外键字段也包含进去,不然Eloquent没法把父模型和子模型关联起来,自然返回的关联数据就都是null了。
问题原因拆解
你的Book模型和author、publisher关联时,肯定依赖了对应的外键(比如author_id、publisher_id)。你现在只选择了Book的id字段,没有把这两个外键加进来,Eloquent拿到父模型数据后,找不到匹配子模型的条件,所以关联数据就成了null。
修复后的代码
只需要在select()里补充关联所需的外键字段就行:
$someData = App\Book::with(['author:id,name,email', 'publisher:id,name,address']) ->select('id', 'author_id', 'publisher_id') // 必须包含关联依赖的外键 ->get();
额外小提示
- 不管是一对一、一对多还是多对多关联,只要手动指定父模型查询字段,都得把关联依赖的外键加进去;
- 如果不想手动列字段,也可以用
select('*')获取父模型所有字段,但这样会查询到一些可能不需要的字段,按需选择就好。
内容的提问来源于stack exchange,提问作者thau0x01
相关产品推荐
相关产品推荐

