如何使用Eloquent批量更新满足24小时时间差条件的Business记录
解决Laravel批量取消超时推荐商家的问题
要准确筛选出updated_at早于当前时间24小时的推荐商家,你需要修正时间条件的写法——原代码用whereDate只会对比日期部分,会忽略时间差的精确计算,导致逻辑错误。
修正后的代码
Business::where('is_featured', true) ->where('updated_at', '<', now()->subHours(24)) ->update(['is_featured' => false]);
或者更简洁的写法,subDay()和subHours(24)效果完全一致:
Business::where('is_featured', true) ->where('updated_at', '<', now()->subDay()) ->update(['is_featured' => false]);
为什么这么改?
now()->subHours(24)会生成当前时间往前推24小时的完整时间戳,和updated_at的时间做精确对比,确保只有真正超过24小时的记录才会被更新。- 原代码的
whereDate('updated_at', '<', now())只对比日期部分,比如当前是10月5日15:00,那10月4日16:00的记录(距离当前还不到24小时)也会被误判,因为日期是10月4日小于10月5日,这完全不符合你的需求。
额外注意
确保Laravel配置文件config/app.php里的timezone和数据库的时区一致,避免因时区差异导致时间计算出现偏差。
内容的提问来源于stack exchange,提问作者Qazi Ammar
相关产品推荐
相关产品推荐

