Laravel查询保留的房间数

时间:2018-02-22 05:07:24

标签: php mysql laravel

对于酒店预订系统,我将获得总房间数和预留房间数。

可用房间数: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是用户输入的日期。

4 个答案:

答案 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-102018-02-20都不在2018-02-122018-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);
    });