我如何处理疯狂的N + 1问题:
foreach ($serie->categories as $category) {
foreach ($category->processes as $process) {
foreach ($process->cards as $card) {
foreach ($card->groups as $group) {
$group->upload;
}
}
}
}
并将其分为一两个陈述? 我正在使用Laravel的Eloquent ORM。
答案 0 :(得分:2)
您可以使用以下命令进行深度嵌套的预先加载:
Serie::with('categories.processes.cards.groups')->get();
这已经加载了每个类别的所有进程,每个进程的卡等等。
$books = Book::with('author.contacts')->get();
如果您想快速获取所有群组,请尝试:
$series = Serie::with('categories.processes.cards.groups')->get()->toArray();
$groups = array_pluck($series, 'categories.processes.cards.groups');
以数组格式返回每个组的属性。您只需要找到一种在组对象上执行->upload()
方法的新方法。