Laravel Eloquent按带AM/PM的时间字段降序排序失败求助
问题解决
你的代码核心问题是把字段名appointment_time用单引号包裹,MySQL会将其视为普通字符串而非字段值,导致排序逻辑失效。
修正后的代码如下:
TimeModel::where('deleted', 0) ->orderBy(DB::raw("STR_TO_DATE(appointment_time, '%l:%i %p')")) ->get();
额外注意事项:
- 确认
appointment_time字段的格式与%l:%i %p匹配:%l对应12小时制无前置零的小时(1-12),%i是带前置零的分钟,%p是AM/PM标识。如果你的字段小时带前置零(如09:30 AM),需将%l替换为%h。 - 若仍有问题,可先执行SQL语句验证转换结果:
排查是否存在格式不匹配的字段值。SELECT STR_TO_DATE(appointment_time, '%l:%i %p') FROM time_table WHERE deleted = 0;
内容的提问来源于stack exchange,提问作者Kaushal Patel
相关产品推荐
相关产品推荐

