You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel SQL实现酒店预订房间指定日期区间占用状态查询

酒店预订房间日期冲突校验调整方案

原有逻辑问题

你现有校验逻辑仅覆盖了「已有预订的入住/离店日期落在新预订时间区间」的场景,当新预订区间完全被已有预订区间包裹时,已有预订的两个日期都不在新区间范围内,无法触发校验,所以会出现漏判。

正确冲突判定逻辑

两个时间区间存在重叠的核心判定条件为:
已有预订的入住日期 < 新预订的离店日期 且 已有预订的离店日期 > 新预订的入住日期

该条件覆盖所有重叠场景:新区间完全包含已有区间、新区间部分重叠已有区间、新区间完全落在已有区间内
如果业务规则要求离店当日不可办理新入住,将运算符调整为<=和>=即可。

调整后代码(Laravel 框架)

$check = Hotel::where('nroom', $value->id)
    ->where(function ($query) use ($arrival_date, $departure_date) {
        $query->where('arrival_date', '<', $departure_date)
              ->where('departure_date', '>', $arrival_date);
    })
    ->first();

// 校验逻辑:如果$check不为空,说明房间在所选时间段已被占用
if ($check) {
    // 抛出房间占用提示逻辑
}

场景验证

以你给出的测试用例为例:

  • 已有预订:5号房 2021-10-10 至 2021-10-25
  • 新预订:5号房 2021-10-11 至 2021-10-20
    代入判定条件:
  1. 已有入住日期 2021-10-10 < 2021-10-20(新离店日期)→ 成立
  2. 已有离店日期 2021-10-25 > 2021-10-11(新入住日期)→ 成立
    查询会命中已有预订,正确判定房间已被占用。

内容的提问来源于stack exchange,提问作者JDPinko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:30:05