在Laravel中加载所有关系及其子女

时间:2016-08-03 20:29:41

标签: laravel laravel-5.1

我有一个相当复杂的结构,包含多个关系。如果以这种方式定义我的关系,如何在一次调用中加载所有关系?

Model
    (has many) ChildModels1
        Child1a
        Child1b
        ...
    (has many) ChildModels2
        Child2a
        Child2b
        ...
    (has many) ChildModels3
        Child3a
        Child3a
            Child3aa
            Child3ab
            ...

我能够做到以下几点:

$entity = Entity::find($id)->load('ChildModels1', 'ChildModels2', 'ChildModels3');

但我不确定如何加载所有子关系。

1 个答案:

答案 0 :(得分:3)

这可以通过预先加载来实现:

Entity::where('id', $id)->with('relation1.subrelation1', 'relation1.subrelation2', 'relation2.subrelation1', 'relation2.subrelation2')->get();
  

当访问Eloquent关系作为属性时,关系   数据是"延迟加载"。这意味着关系数据不是   实际加载,直到您第一次访问该属性。然而,雄辩   可以"渴望加载"查询父模型时的关系。   急切加载缓解了N + 1查询问题。

您可以在Laravel documentation on eager loading中了解更多相关信息。

相关问题