Laravel 8使用Carbon实现记录至少展示一周的查询方案
实现Laravel 8中记录展示一周后自动排除的查询
要实现“记录从创建日起展示满7天后自动排除”的需求,你可以借助Carbon和Laravel的Eloquent查询来完成,核心是筛选出创建时间在最近7天内的记录,具体实现如下:
基础实现(考虑时分秒)
如果需要精确到时间(比如某条记录17/08/2022 14:30创建,到24/08/2022 14:30后才会被排除),可以用以下查询:
use Carbon\Carbon; use App\Models\YourModel; // 替换成你的模型类名 $records = YourModel::where('created_at', '>=', Carbon::now()->subDays(7))->get();
逻辑说明
Carbon::now()->subDays(7):获取当前时间往前推7天的精确时间点(比如今天是25/08/2022 10:00,这个值就是18/08/2022 10:00)。where('created_at', '>=', ...):筛选出创建时间晚于等于这个时间点的记录,这样17/08/2022的记录在25号就会被排除,完全符合你的需求。
精确到日期(忽略时分秒)
如果只需要按日期判断(不管记录是当天几点创建,只要是17号的记录,到25号就排除),可以用whereDate方法忽略时间部分:
use Carbon\Carbon; use App\Models\YourModel; $records = YourModel::whereDate('created_at', '>=', Carbon::today()->subDays(7))->get();
逻辑说明
Carbon::today()返回当天的00:00:00,subDays(7)就是7天前的00:00:00(比如24号执行时是17号00:00,25号执行时是18号00:00)。whereDate只比较日期部分,所以17号的记录在24号还会被查询到,25号就会被排除。
注意事项
- 确保数据库中的日期字段(比如
created_at)是datetime或timestamp类型,且存储的时间与Laravel应用配置的时区一致(可在config/app.php的timezone项设置)。 - 如果你的记录使用自定义日期字段(比如
publish_date),只需将上述代码中的created_at替换为你的字段名即可。
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

