php - 复杂的 Laravel 5 按集合分组

标签 php arrays laravel grouping

我有一个集合“事件”,它具有“站点”和“检查”的关系。

我想做的是在“检查日期”对所有事件进行分组,然后在该组下按“站点”对事件进行分组。

I.E

  • 检查日期 (YYYY-MM-DD)
    • 站点 1
      • 事件名称
      • 事件名称
    • 站点 2
      • 事件名称
  • 检查日期 (YYYY-MM-DD)
    • 站点 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/

相关文章:

php - 在图像中为验证码创建随机曲线

c - 查找数组中具有给定差异的元素

ios - NSArray 的大小

php - 提取后如何删除laravel delete文件?

php - Laravel 5.6 如何在 json 响应中保留 float 和 int 值?

php - Magento getModel ('catalog/product' )->getCollection() with addAttributeToSelect ('*' ) 不返回描述

php - 返回对象数组的数组

php - 像 mtv 一样的 javascript 菜单

javascript - 如何从2个数组中获取总和结果并将其拆分为多个输入?

php - 如何创建数据透视表 laravel?