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
。。。一旦加载了某个东西,它就被加载了,你为什么要一遍又一遍地加载它呢?