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

在Laravel中如何按age分组查询结果并输出指定键名的JSON格式

实现方案

直接调用groupBy只能得到以年龄为键、对应年龄用户列表为值的集合,和你需要的结构不符,需要额外对分组结果做一次转换,参考代码如下:

// 适合所有Laravel版本的写法
$userGroup = User::select('id', 'name', 'age')
    ->get()
    ->groupBy('age')
    ->map(function ($userItems, $age) {
        return [
            'age' => $age,
            'user' => $userItems->map(function ($item) {
                return $item->only(['id', 'name']);
            })
        ];
    })
    ->values();

// 直接返回响应的话Laravel会自动转成符合要求的JSON
return $userGroup;

// 如果需要手动拿到JSON字符串可以调用toJson()
// $jsonResult = $userGroup->toJson();

如果是Laravel 7及以上版本,支持箭头函数可以简化写法:

$userGroup = User::select('id', 'name', 'age')
    ->get()
    ->groupBy('age')
    ->map(fn($userItems, $age) => [
        'age' => $age,
        'user' => $userItems->map(fn($item) => $item->only(['id', 'name']))
    ])
    ->values();

代码说明

  • select('id', 'name', 'age') 提前指定查询字段,避免查询冗余字段,提升性能
  • groupBy('age') 按年龄字段完成分组
  • map 遍历分组结果,将每个分组重构成你需要的age + user结构,同时过滤用户字段只保留id和name
  • values() 重置分组后的关联键为数字索引,保证转JSON后是数组格式而非对象格式

内容的提问来源于stack exchange,提问作者Ye Htun Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:36:03