对于酒店预订系统,我得到的是总房间数和预订房间数。
可用房间数为: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();

上面的两个查询还将返回0我做错了什么?
$checkin_date$checkout_date是用户输入的日期。

最佳答案

如果要查找(预订)范围重叠,应使用:

$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-102018-02-20都不在2018-02-122018-02-18之间。

关于php - Laravel查询预留房间数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48920019/

10-16 07:56