php - 预订系统 - 检查日期是否有空 [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
不幸的是,这个查询告诉我这个日期已经被预订了(实际上没有)。