本文详解如何利用 laravel 的查询构建器和 carbon 库,从 exercises 表的日期字段中提取月份编号(如 1–12),实现按月聚合统计用户训练天数,并找出训练最频繁的月份。
本文详解如何利用 laravel 的查询构建器和 carbon 库,从 exercises 表的日期字段中提取月份编号(如 1–12),实现按月聚合统计用户训练天数,并找出训练最频繁的月份。
在 Laravel 开发中,常需对日期型字段(如 day)进行时间维度聚合分析。你已成功使用 whereMonth() 和 whereYear() 获取当前月的训练天数,但要找出“历史中训练天数最多的月份”,关键在于从存储的日期中动态提取月份信息并分组统计,而非依赖额外表。
Laravel 的查询构建器原生支持 groupByRaw() 配合 MySQL 的 MONTH() 函数,无需手动解析日期字符串。推荐写法如下:
use IlluminateSupportFacadesDB;$topMonth = DB::table('exercises') ->selectRaw('MONTH(day) as month_num, COUNT(DISTINCT DATE(day)) as workout_days') ->where('user_id', auth()->id()) ->groupByRaw('MONTH(day)') ->orderByDesc('workout_days') ->limit(1) ->first();if ($topMonth) { echo "训练最多的月份是:{$topMonth->month_num}月(共{$topMonth->workout_days}天)";}
✅ 说明与优势:
⚠️ 注意事项:
总结:提取月份的核心在于善用数据库原生函数完成聚合,而非在应用层逐条解析。结合 groupByRaw 与 MONTH(),即可简洁、高效地实现“月度训练热度分析”,并轻松扩展为年度对比、趋势图表等高级功能。
独家:悠星大陆『Elysium Expanse』BD构筑二次元MMORPG: Osiris Reborn 进度系统详细说明及全新截图公开
杰森·莫玛饰演的布兰卡果然在《街头霸王6》电影中使出了X光骨骼电击招式
魂坠深境Boss打法详细说明魂坠深境高难度Boss通关攻略
魂坠深境乐师玩法详细说明魂坠深境乐师入门指南与实战技巧
烈火皇城哪个职业最强烈火皇城三大职业详细对比分析
王者荣耀万象棋山鬼养成攻略王者荣耀万象棋山鬼最强阵容搭配