far*_*jam 2 laravel laravel-5.1
我有一个相当复杂的结构,其中包含多个关系。如果我的关系是这样定义的,我如何在一次调用中加载所有这些关系?
Model
(has many) ChildModels1
Child1a
Child1b
...
(has many) ChildModels2
Child2a
Child2b
...
(has many) ChildModels3
Child3a
Child3a
Child3aa
Child3ab
...
Run Code Online (Sandbox Code Playgroud)
我能够执行以下操作:
$entity = Entity::find($id)->load('ChildModels1', 'ChildModels2', 'ChildModels3');
Run Code Online (Sandbox Code Playgroud)
但我也不确定如何加载所有的子关系。
这可以通过 Eager Loading 实现:
Entity::where('id', $id)->with('relation1.subrelation1', 'relation1.subrelation2', 'relation2.subrelation1', 'relation2.subrelation2')->get();
Run Code Online (Sandbox Code Playgroud)
当访问 Eloquent 关系作为属性时,关系数据是“延迟加载”的。这意味着在您第一次访问该属性之前不会实际加载关系数据。但是,Eloquent 可以在您查询父模型时“急切加载”关系。Eager loading 缓解了 N+1 查询问题。
你可以在关于预先加载的 Laravel文档中阅读更多相关信息。
| 归档时间: |
|
| 查看次数: |
2393 次 |
| 最近记录: |