渴望加载3个关系?

时间:2020-09-05 12:30:08

标签: php laravel eloquent

我有这些表:

users | name - ... 
carts | user_id -  ... 
cart_product | cart_id -  product_id 

关系:

Cart model
public function products()
{
    return $this->belongsToMany(Product::class)
                ->withPivot('quantity','coupon_id')
                ->withTimestamps();
}

User model:
public function cart()
{
    return $this->hasOne(Cart::class);
}

当我执行查询时,查询中的n + 1如下:

auth()->user()->cart()->with('products')->products 

我如何急于加​​载查询?

1 个答案:

答案 0 :(得分:3)

我想你只是想要产品?

$products = auth()->user()->cart->products;

这将为该购物车加载cart关系,然后加载products。它不会多次运行这些查询,因为此User现在已加载其cart关系(因此,通过dynamic属性访问时不会再次加载)。 Cart的{​​{1}}关系已加载(通过dynamic属性访问时不会再次加载)。

如果您真的想“延迟加载”这些关系(您必须查看查询是否有任何不同,因为它应该与通过dynamic属性访问相同),可以这样做:

products
相关问题