php - 渴望加载 3 个关系?
问题描述
我有这些表:
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
我怎样才能急于加载查询?
解决方案
我假设你只想要产品?
$products = auth()->user()->cart->products;
这将加载该购物车的cart
关系products
。它不会多次运行这些查询,因为它User
现在已cart
加载其关系(因此通过动态属性访问时不会再次加载)。这Cart
已经products
加载了它的关系(通过动态属性访问时不会再次加载)。
如果您真的想“延迟加载”这些关系(您必须查看查询是否有任何不同,因为它应该与通过动态属性访问它相同),您可以这样做:
$products = auth()->user()->load('cart.products')->cart->products;
推荐阅读
- javascript - Can I have a div that has a parallax image also show the parallax'd image scroll up
- php - 将 API 中的 Json 插入数据库
- android - 更新到最新版本后,您需要在此活动中使用 Theme.AppCompat 主题(或后代)
- rcpp - 无法使用 Eigen 编译旋转 QR 分解(通过 RcppEigen)
- python - 如何在 Flask-Admin 中显示参考字段的实际字段?
- javascript - 带有 jQuery 的 PouchDB
- reactjs - 在反应本机导致错误的注销时清除 redux 存储
- node.js - How to integrate Mongoose and GridFS to NestJS?
- angular - 返回 Observable 的 Angular 服务的单元测试错误部分
- python - 嵌套列表中的最小值