如何在关系 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 * fromapontamentos
where apontamentos
.kanban_id
in (7, 10, 11, 12) 分组dataApontamento
)
你必须把 company.apontamentos.id 放在 group by 或者你必须告诉 laravel 对你必须去 config/database 的数据库使用严格模式 false 并在 mysql 中放这个'严格' => 假
同样的错误...'prefix' => '', 'prefix_indexes' => true, 'strict' => false, 'engine' => null,
如果你的 mysql 的 stict 模式使用 SELECT @@GLOBAL.sql_mode 失败,你可以通过 SET @@GLOBAL.sql_mode=''" 来改变它
怎么解释更好?我使用 xampp以上是关于如何在关系 Laravel 中使用“groupBy”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 中使用具有多态关系的“group by”?
Laravel Query Builder groupBy 结合关系