对于酒店预订系统,我将获得总房间数和预留房间数。
可用房间数:5
用户被预订该房间从:2018-02-22到:2018-02-24
但是如果用户搜索日期25和26,则以下计数为零。我的'<='
或'>='
一定有问题,但我无法找到。
$reservedCount = Reservation::where('check_in', '>=', $checkin_date)->where('check_out', '<=', $checkout_date)->count();
$reservedCount = Reservation::
whereBetween('check_in', [$checkin_date, $checkout_date])
->whereBetween('check_out', [$checkin_date, $checkout_date])
->count();
上述两个查询也会在我做错的地方重新调整为零?
$checkin_date
和$checkout_date
是用户输入的日期。
答案 0 :(得分:5)
你能试试吗
$reservedCount = Reservation::
whereBetween('check_in', [$checkin_date, $checkout_date])
->orWhereBetween('check_out', [$checkin_date, $checkout_date])
->count();
答案 1 :(得分:2)
如果您正在寻找(预订)范围重叠,您应该使用:
$reservedCount = Reservation::where('check_in', '<=', $checkout_date)
->where('check_out', '>=', $checkin_date)
->count();
请注意,对于酒店客房预订,您通常会使用<
和>
代替<=
和>=
,因为一位客户可以在另一位客户的同一天办理登机手续一个人退房。
请注意
之类的内容whereBetween('check_in', [$checkin_date, $checkout_date])
->orWhereBetween('check_out', [$checkin_date, $checkout_date])
找不到重叠
check_in = 2018-02-10
check_out = 2018-02-20
$checkin_date = 2018-02-12
$checkout_date = 2018-02-18
因为2018-02-10
和2018-02-20
都不在2018-02-12
和2018-02-18
之间。
答案 2 :(得分:0)
可以尝试
where(function ($query)
{
$query->where('check_in' ,'>=', $checkin_date)
->orWhere('check_out', '<=', $checkout_date);
})
答案 3 :(得分:0)
在where子句中尝试此操作,以检查日期
$filters=[$checkin_date,$checkout_date];
$event->where(function ($query) use ($filters) {
$query->whereBetween('check_in', $filters);
$query->orWhereBetween('check_out', $filters);
});