Php 渴望加载3个关系?
我有这些桌子:Php 渴望加载3个关系?,php,laravel,eloquent,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')
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;
这将加载购物车
关系,然后加载该购物车的产品
。它不会多次运行这些查询,因为此用户
现在已加载其购物车
关系(因此通过动态属性访问时不会再次加载)。该购物车
已加载其产品
关系(通过动态属性访问时将不会再次加载)
如果您真的想“延迟加载”这些关系(您必须查看查询是否有任何不同,因为它应该与通过dynamic属性访问它相同),您可以这样做:
$products = auth()->user()->load('cart.products')->cart->products;
我想你只是想要这些产品吧
$products = auth()->user()->cart->products;
这将加载购物车
关系,然后加载该购物车的产品
。它不会多次运行这些查询,因为此用户
现在已加载其购物车
关系(因此通过动态属性访问时不会再次加载)。该购物车
已加载其产品
关系(通过动态属性访问时将不会再次加载)
如果您真的想“延迟加载”这些关系(您必须查看查询是否有任何不同,因为它应该与通过dynamic属性访问它相同),您可以这样做:
$products = auth()->user()->load('cart.products')->cart->products;
user()->with('cart.products')如果这样打印,您会得到什么?让我们know@EncangCutbray登录的用户!像这样尝试
return auth()->loadMissing('cart.products')
如果您收到error@EncangCutbray调用模型[App\Models\cart].user()->with('cart.products')上的未定义关系[cart],如果这样打印,您会得到什么?让我们know@EncangCutbray登录的用户!像这样尝试return auth()->loadMissing('cart.products')
如果您收到error@EncangCutbray调用模型[App\Models\cart]上未定义的关系[cart]。load和loadMissing之间有什么不同?因为loadMissing正在工作,但load不工作!这里似乎没有理由需要进行任何延迟加载,因此不确定为什么需要进行延迟加载,因为您直接查询关系,而不是使用动态属性,并且在循环中执行一些查询。。。一旦你拥有了这些产品,就没有什么可再查询的了,除非你自己进行查询,否则你不会在循环中调用load
。。。一旦加载了某个东西,它就被加载了,你为什么要一遍又一遍地加载它呢?加载和加载之间有什么不同?因为loadMissing正在工作,但load不工作!这里似乎没有理由需要进行任何延迟加载,因此不确定为什么需要进行延迟加载,因为您直接查询关系,而不是使用动态属性,并且在循环中执行一些查询。。。一旦你拥有了这些产品,就没有什么可再查询的了,除非你自己进行查询,否则你不会在循环中调用load
。。。一旦加载了某个东西,它就被加载了,你为什么要一遍又一遍地加载它呢?