【问题标题】:How to group in Laravel Eloquent by multiple distanced relationships (grouping by eager loaded relations)如何通过多个距离关系在 Laravel Eloquent 中进行分组(通过急切加载的关系进行分组)
【发布时间】:2019-01-24 06:46:29
【问题描述】:

我的关系链如下:- 一个项目hasMany 目标每个目标hasMany 结果和每个结果hasMany 输出然后每个输出belongsTo ir_indicator 和每个ir_idicator belongsTo ir 和每个ir @987654326 @做。

我需要获取所有项目 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;
         }
    );

问题在于 ->objectivesoutcomesoutputs 都是数组,因为链接它们的 hasMany 关系

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

注意:我在 OctoberCMS 上构建它

【问题讨论】:

  • 一个project可以有多个dos:你想用哪一个来分组?
  • @Jonas 我的想法是使用DO name 作为分组字段,例如 (DO 1) => ['project 1', 'project 2' ] , (DO 2) => ['project 3', 'project 4'] ...
  • 但是一个project可以有多个dos,所以多个names。
  • 是的,它可以在多个组下.. 例如 (DO 1) => ['project 1', 'project 2'] , (DO 2) => ['project 1', '项目 4'], (DO 3) => ['项目 3', '项目 2'] , (DO 4) => ['项目 3', '项目 4']

标签: laravel eloquent octobercms laravel-query-builder


【解决方案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;
    }
}

【讨论】:

  • 由于某种原因,我收到“未定义的索引:执行 2”,不幸的是,由于我使用的是 OctoberCMS(基于 laravel 构建的内容管理系统),因此我没有得到实际发生错误的行。但是我认为它在 foreach 因为这是我们使用 Do Name 的地方
  • 该技术仅适用于数组,不适用于集合。我更新了我的答案。
  • 我得到“未定义的索引:”什么都没有写!,我确信我所有的 Do's 都有名字
  • print_r($names->all()); continue; 放在$names = 行之后。值是否正确?
  • 第三个项目的名字是问题。所有outputs 都有ir_indicator 吗?所有ir_indicators 和ir?所有irs 和do?
猜你喜欢
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 2012-12-11
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
相关资源
最近更新 更多