渴望在Auth :: user()外观上加载嵌套关系

时间:2017-08-02 15:48:07

标签: php laravel laravel-5.4

我正试图从我的用户模型中加载一些关系。方案如下:用户可以有多个sales,每个销售可以包含许多items

我在模型中设置了以下关系:

用户模型:

// Attach User Sales
public function sales()
{
    return $this->hasMany(\App\Models\Sale::class, 'user_id', 'id');
}

销售模式:

// Attach Items
public function items()
{
    return $this->hasMany(Item::class, 'sale_id', 'id');
}

我可以通过执行以下操作来访问用户销售:

Auth::user()->sales

然后我可以循环浏览这些销售以获得销售中的相应商品,如下所示:

@foreach(Auth::user()->sales as $sale)
    {{ dump($sale) }}
    {{ dump($sale->items) }}
@endforeach

但是,这会向我提出N+1问题。

我希望尽快加载嵌套的items关系以减少查询大小。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

修改

使用Lazy Eager Loading因为已经提取了用户。对于嵌套关系,请使用dot syntax

试试这个

Auth::user()->load('sales.items');

这将为您提供迭代结果的嵌套结果。

User (object)
  |
  |_ User Sales (Collection)
       |
       |_ Items of each sale (Collection)