我有一个集合“事件”,它具有“站点”和“检查”的关系。
我想做的是在“检查日期”对所有事件进行分组,然后在该组下按“站点”对事件进行分组。
I.E
- 检查日期 (YYYY-MM-DD)
- 站点 1
- 事件名称
- 事件名称
- 站点 2
- 事件名称
- 站点 1
- 检查日期 (YYYY-MM-DD)
- 站点 1
- 事件名称
- 站点 1
一旦我有了这个分组,我想输出一个像这样的数组:
[
'title => 'Site Name: Event Name, Event Name, Event Name',
'date' => 'YYYY-MM-DD'
]
这远远超出了我的智慧,因此我们将不胜感激!顺便说一句,我正在使用 Postgresql,所以我似乎只能在 id 上使用 groupBy?
我已经尝试使用 groupBy() 和 map() 做一些事情,这似乎有点让我到达某个地方但不确定如何继续:
$events = $events->groupBy('inspection.id')->map(function($item){
return $item->groupBy('site.id');
});
最佳答案
假设结构(简化为数组):
$events = [
'name' => 'event name',
'inspection' => ['date' => ' ... '] // relation
'site' => ['name' => ' ... '] // relation
这是你需要的:
$collection
->groupBy('inspection.date')
->map(function ($events, $date) {
return $events
->groupBy('site.name')
->map(function ($events, $site) use ($date) {
return [
'title' => $site_name.': '.$events->implode('name', ', '),
'date' => $date
];
});
});
关于php - 复杂的 Laravel 5 按集合分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39156054/