Laravel集合按日期分组后如何调整为指定结构的响应格式
解决方法
你只需要在原有groupBy逻辑后追加集合的map遍历+values重置索引操作即可,完整代码如下:
$formattedData = $this->collection->groupBy(function ($date) { return Carbon::parse($date->createdAt)->toDateString(); }) ->map(function ($signItems, $dateStr) { return [ 'date' => $dateStr, 'data' => $signItems ]; }) ->values(); // 接口返回时直接放入data字段即可 return response()->json([ 'data' => $formattedData ]);
逻辑说明
- 原有
groupBy逻辑保留,还是按日期生成键为日期字符串的关联集合 map方法遍历关联集合,将每组数据重组成包含date和data字段的结构- 最后调用
values()方法重置集合的键为连续数字索引,避免转JSON时生成对象结构,最终得到你需要的数组格式。
如果需要按日期倒序排列分组,只需要在groupBy之后追加->sortKeysDesc()即可:
$formattedData = $this->collection->groupBy(function ($date) { return Carbon::parse($date->createdAt)->toDateString(); }) ->sortKeysDesc() // 按日期倒序排列分组 ->map(function ($signItems, $dateStr) { return [ 'date' => $dateStr, 'data' => $signItems ]; }) ->values();
内容的提问来源于stack exchange,提问作者Fredericka Hartman
相关产品推荐
相关产品推荐

