You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel控制器分组后数组键结构转换需求

Laravel 按日期重组拜访计划数据结构

你当前的查询已经完成按日期分组的逻辑,但需要对分组后的集合做格式转换,以得到包含tanggal(日期)和event(门店列表)的目标结构。

原查询代码

$data = DB::table('visit_plan')
            ->join('outlets', 'outlets.id', '=', 'visit_plan.id_outlet')
            ->select('outlets.id', 'outlets.name')
            ->get()
            ->groupBy(function($date) {
                return $this->attributes['date'] = Carbon::parse($date->date)->format('Y-m-d');
            });

$data = $data->reverse();

当前输出结构

{
  "2023-08-29": [
    {
      "id": "0e2b7c5b-c8d4-4c03-bec8-69d9eeeb7e4b",
      "name": "Basura Mall"
    },
    {
      "id": "0e2b7c5b-c8d4-4c03-bec8-69d9eeeb7e4b",
      "name": "TRANSMART KOKAS"
    }
  ]
}

修改后的实现代码

只需在分组后通过map遍历集合,将每个键值对重组为目标格式的对象:

$data = DB::table('visit_plan')
            ->join('outlets', 'outlets.id', '=', 'visit_plan.id_outlet')
            ->select('outlets.id', 'outlets.name', 'visit_plan.date') // 必须选中date字段,否则分组时无法获取日期值
            ->get()
            ->groupBy(function($item) {
                return Carbon::parse($item->date)->format('Y-m-d');
            })
            ->reverse()
            ->map(function($events, $date) {
                return [
                    'tanggal' => $date,
                    'event' => $events
                ];
            })
            ->values() // 移除原日期键,转为索引数组(不需要的话可省略)
            ->all();

最终输出结构

[
  {
    "tanggal": "2023-08-29",
    "event": [
      {
        "id": "01dfcdef-691c-43aa-a167-cb91b153a7e8",
        "name": "Bassura Mall "
      },
      {
        "id": "d494cdf4-7c79-4e7a-9761-c37203b7ba9c",
        "name": "TRANSMART KOKAS"
      }
    ]
  }
]

关键提示

  • 原查询遗漏了visit_plan.date字段的选中,必须补充才能正常获取日期进行分组;
  • map方法负责将每个分组的日期键和门店列表,重组为包含指定字段的结构;
  • values()用于将集合的日期键转换为索引下标,输出纯数组结构,不需要保留原键时可省略。

内容的提问来源于stack exchange,提问作者Agis R Herdiana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:42:46