laravel - 如何在 Laravel Eloquent 中通过多个距离关系进行分组(通过急切加载的关系进行分组)
问题描述
我有一个如下的关系链: - 一个项目hasMany
目标每个目标hasMany
结果和每个结果hasMany
输出然后每个输出belongsTo
ir_indicator 和每个 ir_idicator belongsTo
ir 和每个 irbelongsTo
做。
我需要获得所有项目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
都是数组,因为hasMany
它们之间的关系
如何将我的项目与由数组层组成的远距离关系分组?
注意:我在 OctoberCMS 上构建它
解决方案
那不是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;
}
}
推荐阅读
- python - Python - 如何在 django 模板中为所有值并排显示两个键的字典值
- python - 为什么梯度带张量流使张量的总和?
- c# - 尝试设置配置值`IHostBuilder`,但未反映在启动类中的 ConfigureServices - asp.net core 3.1
- sorting - 颤动按日期对数组列表进行排序
- javascript - “字符串”类型上不存在 Typescript 属性“标签”
- aws-lambda - 如何在 CodeBuild 中为 Lambda 函数添加 Python 库依赖项
- java - Spring Boot JPA 获取列表并向其中添加项目会引发错误
- spotfire - TIBCO Spotfire:错误消息:无法在 Spotfire.Dxp.Data 创建 DataTable ImportException:无法创建 DataTable(HRESULT:80131500)
- c# - CSVHelper - 将名称从 CSV 导入具有相同名称属性的对象
- python - 如何从不同的文件调用方法而不在python中导入它