我的关系链如下:-项目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;
}
);
,->objectives
和outcomes
都是数组,因为它们之间存在outputs
关系
如何将我的项目与构成数组层的远距离关系分组?
注意:我正在OctoberCMS上构建此
答案 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;
}
}