如何通过多个距离关系将Laravel雄辩地分组(通过渴望的加载关系进行分组)

时间:2018-08-17 08:55:56

标签: laravel eloquent octobercms laravel-query-builder

我的关系链如下:-项目hasMany目标每个目标hasMany成果和每个成果hasMany的输出然后是每个输出belongsTo ir_indicator和每个ir_idicator { {1}}个ir和每个belongsTo个ir。

我需要获得所有项目belongsTo的do名称,以更仔细地查看我所使用的项目,结帐

groupBy

问题是 $ProjectsGroupedByDO = Project::has('objectives.outcomes.outputs.ir_indicator.ir.do') ->orderBy('created_at','desc') ->get() ->groupBy(function($d) { return $d->objectives->outcomes->outputs->ir_indicator->ir->do->name; } ); ->objectivesoutcomes都是数组,因为它们之间存在outputs关系

如何将我的项目与构成数组层的远距离关系分组?

注意:我正在OctoberCMS上构建此

1 个答案:

答案 0 :(得分:1)

这不是groupBy()的目的。您必须自己构建它:

$projects = Project::has('objectives.outcomes.outputs.ir_indicator.ir.do')->latest()->get();
$projectsGroupedByDO = new \Illuminate\Database\Eloquent\Collection;
foreach($projects as $project) {
    $outputs = $project->objectives->pluck('outcomes')->flatten()->pluck('outputs')->flatten();
    $names = $outputs->pluck('ir_indicator.ir.do.name');
    foreach($names as $name) {
        if(!isset($projectsGroupedByDO[$name])) {
            $projectsGroupedByDO[$name] = new \Illuminate\Database\Eloquent\Collection;
        }
        $projectsGroupedByDO[$name][] = $project;
    }
}