laravel中"with"和"load"之间有什么不同

Har*_*man 6 php laravel

我已经浏览了laravel文档,我没有得到WithLoad in queries 之间的不同,在哪种情况下我们需要使用With或Load?请描述一下

Model::find(1)->with('firstModel','SecondModel');

Model::find(1)->load('firstModel','SecondModel');
Run Code Online (Sandbox Code Playgroud)

lag*_*box 5

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 查询关系


Ale*_*nin 4

简而言之,with()同时加载与父模型的关系。这是急切的负载。

如果您不想急切加载该数据,可以使用延迟加载或急切延迟加载。在这种情况下,当您实际开始使用关系时,将加载数据。因此,您可以在运行时决定要加载什么关系,或者您可能根本不想加载任何关系数据等。