Laravel中如何对日期排序、修改格式后按日期分组?
问题原因
你当前的排序异常是因为分组后数据库默认按照格式化后的月份英文名称的字母序排序:August(A开头)、November(N开头)、September(S开头)的字母顺序刚好和你现在的错误输出顺序一致,不符合时间维度的月份先后逻辑。
解决方法
直接在查询阶段通过原始日期的时间顺序排序即可,这里提供两种可行的写法:
- 基于分组内最小日期排序,无需额外查询多余字段:
$date = DateList::where('id',$id->id) ->select(DB::raw("(DATE_FORMAT(date, '%M')) as newDate")) ->groupBy('newDate') ->orderBy(DB::raw('MIN(date)'), 'asc') ->get();
- 显式查询月份数字用于排序,逻辑更直观易于维护:
$date = DateList::where('id',$id->id) ->select(DB::raw("DATE_FORMAT(date, '%M') as newDate, DATE_FORMAT(date, '%m') as month_order")) ->groupBy('newDate', 'month_order') ->orderBy('month_order', 'asc') ->get();
两种写法最终返回的newDate顺序都会符合你预期的时间升序要求,直接填充到下拉框即可。
内容的提问来源于stack exchange,提问作者GarfieldJunior
相关产品推荐
相关产品推荐

