我正在尝试创建储备金表格。如何在“签到”和“签出”之间创建一个介于两个日期之间的日期,如果在两个日期之间已经保留了特定的房间,则不允许发送预订票。
仅拒绝确认“签到”或“结账”是否与其他已确认预订在同一天。
$from = Carbon::createFromFormat('d/m/Y', $checkin)->format('Y-m-d');
$to = Carbon::createFromFormat('d/m/Y', $checkout)->format('Y-m-d');
$marcacaocounter1 = Marcacao::where('active', 1)
->whereBetween('checkin', [$from, $to])->count();
$marcacaocounter2 = Marcacao::where('active', 1)
->whereBetween('checkout', [$from, $to])->count();
if($marcacaocounter1 > 0 || $marcacaocounter2 > 0){
$errors = true;
return response()->json([
'errors' => $errors,
'errors_msg' => $errors_msg,
'success' => $success,
'success_msg' => $success_msg,
'data' => $dadosJson]
);
}
答案 0 :(得分:0)
通过查看该时间段内这些房间的数据库中的内容,可以很容易地拉出两个日期之间的预定房间。具有where
和<=
的老式>=
语句。这样的东西(根据您的需要进行调整):
$booked = Marcacao::where('active', 1)
->where('checkin', "<=", $from)
->where('checkout', ">=" $to)
->orWhere(function ($query) {
$query->where('checkin', '>', $from)
->where('checkout', '<=', $to);
})->orWhere(function ($query) {
$query->where('checkin', '<=', $from)
->where('checkout', '>', $to);
})->count()
然后继续输入代码:
if($booked){
$errors = true;
return [...]
}