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

如何按出生日期的月份排序用户并获取完整用户字段?

解决方案

核心思路

你不需要用groupBy(这会合并同月份的用户,丢失个体信息),也不需要限制select字段。只需在排序时提取出生日期的月份,同时保留所有用户字段即可。

1. 按数字月份排序(1-12)

直接通过orderBy提取出生日期的月份数字,获取完整用户数据:

$employees = User::orderBy(DB::raw('MONTH(birth_date)'))->get();

这样返回的是所有用户的完整信息,按出生月份从1月到12月排序。

2. 按月份名称排序(如January-December)

如果需要按英文月份名称排序,可使用DATE_FORMAT提取月份名称:

$employees = User::orderBy(DB::raw("DATE_FORMAT(birth_date, '%M')"))->get();

注:如果需要中文月份,可将%M改为%c配合数据库语言设置,或后续用Carbon处理。

3. 按月份分组展示(可选)

如果需要把同月份的用户归类在一起,可在获取数据后用Laravel集合的groupBy方法处理:

use Carbon\Carbon;

$employeesByMonth = User::orderBy(DB::raw('MONTH(birth_date)'))
    ->get()
    ->groupBy(function($user) {
        return Carbon::parse($user->birth_date)->format('F'); // 生成英文月份名称
        // 若要中文月份,可改为:return Carbon::parse($user->birth_date)->monthName;
    });

这会得到一个以月份名为键、对应月份用户集合为值的结构,每个用户的完整信息都保留。

原代码问题说明

你之前的查询用select只指定了months字段,所以仅返回该字段;groupBy会将同月份的用户合并成一条记录,这和你需要保留完整用户信息的需求冲突,因此需要去掉这两个操作。

内容的提问来源于stack exchange,提问作者Kishan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:40:45