关于Eager用Laravel Eloquent Model中的选择过滤器加载
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Eager用Laravel Eloquent Model中的选择过滤器加载相关的知识,希望对你有一定的参考价值。
我有一个关系定义
class people {
public function hobbies() {
return $this->hasMany(hobby::class, "people_id")->select(['name', 'action', 'effect']);
}
}
我试着加载急切的加载
people::with('hobbies')->get();
最终我的结果hobbies
总是空的,然后我发现它是因为选择过滤器没有people_id
在people
和hobbies
的关系中
public function hobbies() {
return $this->hasMany(hobby::class, "people_id")->select(['people_id', 'name', 'action', 'effect']);
}
那么我现在有一个问题,为什么它需要选择过滤器中的外键?
对于sql查询,select hobbies.name, hobbies.action, hobbies.effect from hobbies join people on hobbies.people _id = people.id
足以检索数据?
答案
急切加载查询实际上如下所示:
select `people_id`, `name`, `action`, `effect`
from `hobbies`
where `people_id` in (1, 2, 3, ...)
如果你从people_id
列中删除SELECT
,Laravel不知道这些爱好属于哪些人。
以上是关于关于Eager用Laravel Eloquent Model中的选择过滤器加载的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:Eloquent Eager Loading 关系的选择
如何使用 Laravel 的 Eloquent 关系与 Eager Loading 连接 3 个表?
Laravel Eloquent Eager Loading:加入同一张表两次
Eloquent Eager Load Constraints 返回 JSON String 而不是 Object