我有以下内容可将组中的所有用户及其帖子重新带回。
$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
答案 0 :(得分:1)
如果将单个参数传递给with()
,它将查找具有匹配名称的关系。使用带逗号的单个字符串将不起作用,因为它将无法解析和尊重它。由于您尝试使用多个关系,因此这需要具有多个签名,可以通过多种方法来完成。
首先,数组语法:
->with(["users.posts", "houses"])
第二个,多个参数:
->with("users.posts", "houses")
这两种方法都将指定您要在初始查询中加载多个关系;优先考虑您更容易阅读的内容。