使用Eloquent在已联接的表上联接多个表

时间:2019-01-02 15:36:45

标签: laravel eloquent laravel-5.7

我有以下内容可将组中的所有用户及其帖子重新带回。

$group = Group::where('id', $id)->with('users.posts')->firstOrFail();

但是,我需要对用户进行额外的加入,以带回更多的(hasMany)信息。

我想要的是这样的东西(尽管这不起作用)

$group = Group::where('id', $id)->with('users.posts,houses')->firstOrFail();

sql看起来像

SELECT * FROM groups 
JOIN group_users ON groups.id = group_users.group_id
JOIN users ON users.id = group_users.user_id
JOIN posts ON posts.user_id = users.id
JOIN house_users ON house_users.user_id = users.id
JOIN houses ON houses.id = house_users.house_id
WHERE groups.id = 123

1 个答案:

答案 0 :(得分:1)

如果将单个参数传递给with(),它将查找具有匹配名称的关系。使用带逗号的单个字符串将不起作用,因为它将无法解析和尊重它。由于您尝试使用多个关系,因此这需要具有多个签名,可以通过多种方法来完成。

首先,数组语法:

->with(["users.posts", "houses"])

第二个,多个参数:

->with("users.posts", "houses")

这两种方法都将指定您要在初始查询中加载多个关系;优先考虑您更容易阅读的内容。