在 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 是一对多关系吗?