如何在关系 Laravel 中使用“groupBy”

Posted

技术标签:

【中文标题】如何在关系 Laravel 中使用“groupBy”【英文标题】:how to use "groupBy" with relationship Laravel 【发布时间】:2020-08-27 08:29:43 【问题描述】:

我需要按日期进行分组。问题是两个表“看板”和“apontamentos”。

类似:看板::with('apontamento')->get()->groupBy('dataApontamento'); 属性错误

enter image description here

我已经尝试了所有方法,在模型中使用“groupBy”。需要知道如何在控制器中分组并执行“foreach”

我最接近的就是这样:

$days = Kanban::with('apontamentos')->get()->groupBy(function ($val) 
      return $val->dataApontamento;
  );
  // dd($days);

  foreach ($days as $day => $appointments) 
    echo '<h2>'.$day.'</h2><ul>';
    foreach ($appointments as $appointment) 
        echo '<li>'.$appointment->atividade.'</li>';
    
    echo '</ul><br>';
  

更清晰的例子:

看板

标题:等待服务

Apontamentos

日期 05/05

项目1

项目2

项目3

日期 06/05

项目1

项目2

项目6

项目7

看板

标题:待定

配菜

日期:08/05

项目9

项目8

项目4

看板

标题:看板

标题:等待服务

配菜

日期:09/05

项目1

项目1

项目1

项目1

10/05

项目1

项目1

项目1

项目1

【问题讨论】:

【参考方案1】:

试试这个!

Kanban::with(['apontamentos' => function($query)
    $query->groupBy('dataApontamento');
])->get();

【讨论】:

感谢@Alex 的回复,给出了这个错误。 SQLSTATE[42000]:语法错误或访问冲突:1055 'company.apontamentos.id' 不在 GROUP BY 中(SQL:select * from apontamentos where apontamentos.kanban_id in (7, 10, 11, 12) 分组dataApontamento) 你必须把 company.apontamentos.id 放在 group by 或者你必须告诉 laravel 对你必须去 config/database 的数据库使用严格模式 false 并在 mysql 中放这个'严格' => 假 同样的错误...'prefix' =&gt; '', 'prefix_indexes' =&gt; true, 'strict' =&gt; false, 'engine' =&gt; null, 如果你的 mysql 的 stict 模式使用 SELECT @@GLOBAL.sql_mode 失败,你可以通过 SET @@GLOBAL.sql_mode=''" 来改变它 怎么解释更好?我使用 xampp

以上是关于如何在关系 Laravel 中使用“groupBy”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中使用具有多态关系的“group by”?

groupBy 在 laravel 中具有雄辩的关系

Laravel Query Builder groupBy 结合关系

如何在 Laravel 5 的嵌套查询中使用 GroupBy?

如何在 Laravel 关系中实现 SUM()?

如何在 whereHas laravel 中使用 groupBy