Jos*_*ton 6 php laravel laravel-5.4
我正在尝试从我的用户模型中加载一些关系。场景如下:一个用户可以有多个sales
,每个销售可以包含多个items
。
我在我的模型中设置了以下关系:
用户模型:
// Attach User Sales
public function sales()
{
return $this->hasMany(\App\Models\Sale::class, 'user_id', 'id');
}
Run Code Online (Sandbox Code Playgroud)
销售型号:
// Attach Items
public function items()
{
return $this->hasMany(Item::class, 'sale_id', 'id');
}
Run Code Online (Sandbox Code Playgroud)
我可以通过执行以下操作来访问用户销售:
Auth::user()->sales
Run Code Online (Sandbox Code Playgroud)
然后我可以遍历这些销售以获取销售中的相应商品,如下所示:
@foreach(Auth::user()->sales as $sale)
{{ dump($sale) }}
{{ dump($sale->items) }}
@endforeach
Run Code Online (Sandbox Code Playgroud)
然而,这给我带来了N+1
问题。
我希望急切加载嵌套items
关系以减少查询大小。
任何帮助深表感谢。
编辑
使用,Lazy Eager Loading
因为用户已经被获取。对于嵌套关系,请使用dot syntax
.
尝试这个
Auth::user()->load('sales.items');
Run Code Online (Sandbox Code Playgroud)
这将为您提供嵌套结果以进行迭代。
User (object)
|
|_ User Sales (Collection)
|
|_ Items of each sale (Collection)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2569 次 |
最近记录: |