我有一个相当复杂的结构,包含多个关系。如果以这种方式定义我的关系,如何在一次调用中加载所有关系?
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');
但我不确定如何加载所有子关系。
答案 0 :(得分:3)
这可以通过预先加载来实现:
Entity::where('id', $id)->with('relation1.subrelation1', 'relation1.subrelation2', 'relation2.subrelation1', 'relation2.subrelation2')->get();
当访问Eloquent关系作为属性时,关系 数据是"延迟加载"。这意味着关系数据不是 实际加载,直到您第一次访问该属性。然而,雄辩 可以"渴望加载"查询父模型时的关系。 急切加载缓解了N + 1查询问题。
您可以在Laravel documentation on eager loading中了解更多相关信息。