关于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_idpeoplehobbies的关系中

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

通过 Eager Loading 从 Eloquent 获取 RAW SQL 查询

Laravel Eager Loading 在单个注入模型上