首页 > 解决方案 > 预订系统 - 检查日期是否有空 [Laravel 8]

问题描述

我需要检查日期范围是否免费。

这是我的表的结构:

Reservations 

id            int(10)   
procuct_id    int(10)   
start         (date)
end           (date)

.

Products

id           int(10)    
name         varchar(600)

我做了这样的事情:

return Reservations::where('procuct_id', $product_id)->where(function ($query) use ($start_date, $end_date) {
            $query->where(function ($q) use ($start_date, $end_date) {
                $q->where('start_date', '>=', $start_date)
                    ->where('start_date', '=<', $start_date);
            })->orWhere(function ($q) use ($start_date, $end_date) {
                $q->where('end_date', '>=', $start_date)
                    ->where('end_date', '<=', $start_date);
            })->orWhere(function ($q) use ($start_date, $end_date) {
                $q->where('start_date', '>=', $end_date)
                    ->where('start_date', '<=', $end_date);
            })->orWhere(function ($q) use ($start_date, $end_date) {
                $q->where('end_date', '>=', $end_date)
                    ->where('end_date', '<=', $end_date);
            })->orWhere(function ($q) use ($start_date, $end_date) {
                $q->where('start_date', '<=', $start_date)
                    ->where('end_date', '>=', $start_date);
            })->orWhere(function ($q) use ($start_date, $end_date) {
                $q->where('start_date', '<=', $end_date)
                    ->where('end_date', '>=', $end_date);
            });
        })->count();

当第二次预订在另一次预订结束之日开始时,这不起作用。

例如:

数据库日期:

Start 01-01-2021   End 04-01-2021

我想预订新的日期

Start 04-01-2021   End 08-01-2021

不幸的是,这个查询告诉我这个日期已经被预订了(实际上没有)。

标签: phpdatabaselaravel

解决方案


推荐阅读