我已经浏览了laravel文档,我没有得到With或Load in queries 之间的不同,在哪种情况下我们需要使用With或Load?请描述一下
Model::find(1)->with('firstModel','SecondModel');
Model::find(1)->load('firstModel','SecondModel');
Run Code Online (Sandbox Code Playgroud)
Model::find(1)->with('firstModel','SecondModel');
Run Code Online (Sandbox Code Playgroud)
根本没有做任何事情,就像with现在的新构建器与从 . 返回的模型无关find(1)。
Model::with(....)->find(1);
Run Code Online (Sandbox Code Playgroud)
会急切地加载关系。
Model::find(1)->load(...);
Run Code Online (Sandbox Code Playgroud)
是惰性急切加载。它正在将关系加载到您已检索的现有模型实例。(就像find(1)返回一个模型实例并load告诉它加载指定的关系一样)
load也可以用于集合来加载包含的所有模型实例上的关系。load与处理单个模型相比,在处理一组模型时更有用,因为仅对模型上的关系使用动态属性(延迟加载,如果尚未加载)将导致运行相同的查询。在集合上,它在迭代它们时消除了任何 N+1 问题。
您可以查看这篇文章以获取更多相关信息。
asklagbox - 博客 - Eloquent 查询关系
简而言之,with()同时加载与父模型的关系。这是急切的负载。
如果您不想急切加载该数据,可以使用延迟加载或急切延迟加载。在这种情况下,当您实际开始使用关系时,将加载数据。因此,您可以在运行时决定要加载什么关系,或者您可能根本不想加载任何关系数据等。
| 归档时间: |
|
| 查看次数: |
2910 次 |
| 最近记录: |