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

Laravel中从数据库date列获取唯一年月列表的其他实现方式

替代方案:获取格式化后的唯一年月值

以下是几种基于Eloquent或集合的实现方式,能直接得到YYYY-MM格式的唯一年月列表:

1. 数据库层面直接格式化(推荐)

直接在查询时用数据库函数拼接成目标格式,再提取结果,性能最优:

SubjectReport::selectRaw("DATE_FORMAT(date, '%Y-%m') as year_month")
    ->distinct()
    ->pluck('year_month');

执行后返回的集合直接包含2023-01、2023-02这类字符串,遍历即可输出目标格式。

2. 集合层面处理日期

先取出原始日期,再通过集合的map方法格式化,最后去重:

SubjectReport::select(['date'])
    ->distinct()
    ->get()
    ->map(fn($item) => $item->date->format('Y-m'))
    ->unique();

适合需要对日期做额外逻辑处理的场景,注意要确保date字段在模型中被定义为日期类型(通过$dates属性或cast配置)。

3. 用GROUP_BY替代DISTINCT

和第一种逻辑类似,用groupBy实现去重效果:

use Illuminate\Support\Facades\DB;

SubjectReport::select(DB::raw("DATE_FORMAT(date, '%Y-%m') as year_month"))
    ->groupBy('year_month')
    ->pluck('year_month');

groupBy和distinct在这个场景下效果一致,可根据个人习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:52:10