我有这些表:
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
我如何急于加载查询?
答案 0 :(得分:3)
我想你只是想要产品?
$products = auth()->user()->cart->products;
这将为该购物车加载cart
关系,然后加载products
。它不会多次运行这些查询,因为此User
现在已加载其cart
关系(因此,通过dynamic属性访问时不会再次加载)。 Cart
的{{1}}关系已加载(通过dynamic属性访问时不会再次加载)。
如果您真的想“延迟加载”这些关系(您必须查看查询是否有任何不同,因为它应该与通过dynamic属性访问相同),可以这样做:
products