Laravel中如何筛选距今日剩余6天的预订记录?
解决Laravel预订系统的通知筛选问题
你的查询条件>= Carbon::now()->addDays(6)是错误的——它会筛选出6天后及更晚的所有预订,自然会返回全部未来记录,和你要找的“未来6天内的预订”完全相反。
正确解决方案
要匹配你描述的需求(今日3号通知6号、8号客户,明日4号通知10号客户),需要筛选当前日期到未来6天内的有效预订,同时排除已过期的订单(比如1号的预订)。
对应的代码如下:
public function test(){ $today = Carbon::today(); // 只取日期部分,避免时分秒干扰日期匹配 $orders = Order::whereDate('booked_at', '>=', $today) ->whereDate('booked_at', '<=', $today->addDays(6)) ->get(); return $orders; }
额外说明
- 为什么用
Carbon::today():Carbon::now()会包含具体时间(比如10:30:00),而whereDate()仅对比日期部分,用today()能确保日期比较的准确性,避免因为时间差导致匹配错误。 - 如果仅需筛选“恰好距离今日6天”的订单:比如你明日4号只想通知10号的客户,可简化代码为:
public function test(){ $targetDate = Carbon::today()->addDays(6); $orders = Order::whereDate('booked_at', $targetDate)->get(); return $orders; }
内容的提问来源于stack exchange,提问作者Zia
相关产品推荐
相关产品推荐

