优化深层嵌套的Eloquent循环

时间:2014-04-15 01:37:07

标签: laravel eloquent

我如何处理疯狂的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。

1 个答案:

答案 0 :(得分:2)

您可以使用以下命令进行深度嵌套的预先加载:

Serie::with('categories.processes.cards.groups')->get();

这已经加载了每个类别的所有进程,每个进程的卡等等。

查看documentation

$books = Book::with('author.contacts')->get();

如果您想快速获取所有群组,请尝试:

$series = Serie::with('categories.processes.cards.groups')->get()->toArray();

$groups = array_pluck($series, 'categories.processes.cards.groups');

以数组格式返回每个组的属性。您只需要找到一种在组对象上执行->upload()方法的新方法。