Eloquent中的嵌套一对多关系

3
假设我有三个模型,它们之间存在如下关系:
USER 拥有 多个 ORGANISATION
ORGANISATION 拥有 多个 ORDER
ORDER
如果只需要获取一级数据,可以使用以下代码: user->organisations()->get()
这样就能获取与用户相关的所有组织。但是每个组织也可能有0到多个订单实体,因此我们想要通过以下方式来获取所有用户的所有组织中的订单列表: user->organisations()->orders()->get()
这样是否可行呢?

如果你尝试一下,你会发现这是可能的。也可以通过\User::with(["organisations", "organisations.orders"])->find()预加载它们。 - apokryfos
2
你可以在这里使用 hasManyThrough()。https://laravel.com/docs/5.4/eloquent-relationships#has-many-through - Gayan
@Gayan 谢谢。问题已解决。如果您愿意,可以将其写成答案,然后我可以将其标记为正确的。 - Christoffer
@Christoffer,我已经发布了答案,很高兴你觉得有帮助 :) - Gayan
1个回答

4
你可以简单地在 User 模型上实现 hasManyThrough() 关联来完成此操作。
public function orders()
{
    return $this->hasManyThrough(Order::class, organisation::class);
}

那么,您可以像这样进行查询:
$user->orders()->get();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接