从集合中获取间接关系

时间:2017-06-13 09:53:25

标签: laravel laravel-5 eloquent laravel-eloquent

我有:

User->hasMany('Order')

...

Order->hasMany('Product')

...

$users=User::with('orders','orders.product')->...

如何利用急切加载而不是进行其他查询来检索$ users中用户购买的所有产品?

1 个答案:

答案 0 :(得分:0)

您可以在用户模型上使用hasManyThrough关系。

https://laravel.com/docs/5.4/eloquent-relationships#has-many-through

public function products()
{
    return $this->hasManyThrough('App\Product', 'App\Order');
}

或使用集合作为您已经热切的加载。

$products = User::with('orders','orders.product')->flatMap(function(User $user) {
    return $user->orders->flatMap(function(Order $order) {
        return $order->products;
    });
});