在 Eloquent 中嵌套一对多关系

Posted

技术标签:

【中文标题】在 Eloquent 中嵌套一对多关系【英文标题】:Nested one to many relationships in Eloquent 【发布时间】:2017-06-22 13:40:59 【问题描述】:

假设我有三个具有这种关系的模型

用户 hasMany(应用程序/组织)

组织 hasMany(应用程序/订单)

订购

对于一个级别,我可以去 user->organisations()->get()

让所有组织都与用户绑定。但是每个组织也有 0..many ORDER 实体。所以我想这样做:

user->organisations()->orders()->get()

从某个用户获取所有组织的所有订单列表。这样可以吗?

【问题讨论】:

如果你尝试一下,你会发现这种方式是可能的。也可以通过\User::with(["organisations", "organisations.orders"])->find() 预加载它们 您可以在这里使用hasManyThrough()。laravel.com/docs/5.4/eloquent-relationships#has-many-through @Gayan 谢谢。那解决了它。如果你愿意,把它写成答案,然后我可以检查它是否正确。 @Christoffer 我发布了答案,很高兴你觉得它有帮助:) 【参考方案1】:

您可以简单地在User 模型上实现hasManyThrough() 关系。

public function orders()

    return $this->hasManyThrough(Order::class, organisation::class);

然后你可以像这样查询,

$user->orders()->get();

【讨论】:

以上是关于在 Eloquent 中嵌套一对多关系的主要内容,如果未能解决你的问题,请参考以下文章

在 ORM(Eloquent)中,具有 Genre 的 Book 是一对多关系吗?

Eloquent 一对多关系的错误

无法删除一对多关系中的记录 laravel eloquent

laravel eloquent 中的一对多关系

Eloquent中一对多关系表的分组和总和

Laravel Eloquent 一对多关系