$query->with() 正在工作,但 $query->load() 在 Laravel 中不工作
$query->with() is working but $query->load() not working in Laravel
我有三个模型。
- 部分
- 主题
- 章节
Section 有很多主题,主题有很多章节。
我想加载一个包含所有主题的部分和包含所有章节的主题。
这是我正在尝试的代码:
$section = Section::find(1)->load(['subjects' => function ($query) {
$query->load('chapters');
}]);
这是行不通的。 $query->load('chapters')
这部分给我错误。但是如果我尝试这个代码:
$section = Section::find(1)->load(['subjects' => function ($query) {
$query->with('chapters');
}]);
这是有效的。我对 $query->with()
有一些疑问,所以我想改用 $query->load()
。我应该怎么做才能使用 load()
而不是 with()
>
为什么不使用:
$section = Section::query()->with('subjects.chapters')->find(1)
这将预加载带有章节的主题并让您快速获得结果。
Eloquent 查询生成器没有名为 load()
的函数。但是 Eloquent 模型会。
$section = Section::find(1)
->load(['subjects' => function ($query) { // in here you are calling load on a model (Section).
$query->load('chapters'); // in here you are calling load on a query builder instance.
}]);
- 当你想在获取模型后加载一些关系时,使用
load()
函数
- 如果您想在获取模型时加载一些关系,请使用
with()
函数
在您的情况下,您已经获取了主题。所以你可以使用load('subject')
。但是当你加载主题时(你还没有获取主题),所以你应该调用 with('chapters')
编辑
第二种方法的简短版本
$section = Section::find(1)->load(['subjects.chapters');
如果没有特殊要求单独获取section,更好的方法是在获取section的同时加载主题和章节。
$section = Section::with('subjects.chapters')->find(1)
我有三个模型。
- 部分
- 主题
- 章节
Section 有很多主题,主题有很多章节。 我想加载一个包含所有主题的部分和包含所有章节的主题。 这是我正在尝试的代码:
$section = Section::find(1)->load(['subjects' => function ($query) {
$query->load('chapters');
}]);
这是行不通的。 $query->load('chapters')
这部分给我错误。但是如果我尝试这个代码:
$section = Section::find(1)->load(['subjects' => function ($query) {
$query->with('chapters');
}]);
这是有效的。我对 $query->with()
有一些疑问,所以我想改用 $query->load()
。我应该怎么做才能使用 load()
而不是 with()
>
为什么不使用:
$section = Section::query()->with('subjects.chapters')->find(1)
这将预加载带有章节的主题并让您快速获得结果。
Eloquent 查询生成器没有名为 load()
的函数。但是 Eloquent 模型会。
$section = Section::find(1)
->load(['subjects' => function ($query) { // in here you are calling load on a model (Section).
$query->load('chapters'); // in here you are calling load on a query builder instance.
}]);
- 当你想在获取模型后加载一些关系时,使用
load()
函数 - 如果您想在获取模型时加载一些关系,请使用
with()
函数
在您的情况下,您已经获取了主题。所以你可以使用load('subject')
。但是当你加载主题时(你还没有获取主题),所以你应该调用 with('chapters')
编辑 第二种方法的简短版本
$section = Section::find(1)->load(['subjects.chapters');
如果没有特殊要求单独获取section,更好的方法是在获取section的同时加载主题和章节。
$section = Section::with('subjects.chapters')->find(1)