如何在我签入和签出之间创建一个介于日期之间的日期

时间:2019-07-15 15:47:16

标签: laravel eloquent

我正在尝试创建储备金表格。如何在“签到”和“签出”之间创建一个介于两个日期之间的日期,如果在两个日期之间已经保留了特定的房间,则不允许发送预订票。

仅拒绝确认“签到”或“结账”是否与其他已确认预订在同一天。

$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]
    );

}

1 个答案:

答案 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 [...]
}