Laravel Scout与Meilisearch:按created_at筛选日期区间并降序排序
解决方案
你的代码核心问题是排序字段用了id而非需求的created_at,另外日期范围的处理是没问题的——Carbon的startOfDay()和endOfDay()已经生成了准确的当日起止时间,完全适配非timestamp类型的created_at字段(比如datetime类型)。
修正后的完整代码:
$startDate = Carbon::parse('2022-02-01')->startOfDay(); $endDate = Carbon::parse('2022-02-15')->endOfDay(); $messages = MessagesArch::search($myQuery) ->query(function($q) use ($startDate, $endDate) { $q->whereBetween("created_at", [$startDate, $endDate]); }) ->orderBy('created_at', 'desc') // 替换为created_at字段排序 ->get();
关键说明
- 排序逻辑:将
orderBy('id','desc')替换为orderBy('created_at','desc'),直接满足按创建时间降序的需求。 - 日期筛选:
whereBetween接收的Carbon对象会自动转换为数据库可识别的datetime格式(比如2022-02-01 00:00:00),无需额外转换就能适配非timestamp类型的字段。
内容的提问来源于stack exchange,提问作者php fox
相关产品推荐
相关产品推荐

