При бронировании временного интервала я хочу проверить, не перекрывается ли этот интервал с любым другим уже забронированным временным интервалом. Используется следующий запрос для того же, который неверен:

Availability::where('date',date('Y-m-d',strtotime($request->available_date)))
             ->where(function ($query) use($request){
                  $query->whereBetween('start_time', [date("H:i:s", strtotime($request->start_time)), date("H:i:s", strtotime($request->end_time))])
                        ->orWhereBetween('end_time', [date("H:i:s", strtotime($request->start_time)), date("H:i:s", strtotime($request->end_time))]);
              })
              ->get();

Заранее спасибо!

0
Inder Bajaj 3 Янв 2018 в 08:22

2 ответа

Лучший ответ

Во-первых, чтобы иметь доступ к $startTime и $endTime в закрытии запроса, вам необходимо передать их, используя конструкцию use, т.е.

function ($query) use ($startTime, $endTime)

Попробуйте, как показано ниже:

$startTime = $request->start_time; 
$endTime = $request->end_time; 

$Availability = Availability::where(function ($query) use ($startTime, $endTime) { 
    $query
    ->where(function ($query) use ($startTime, $endTime) {
        $query
            ->where('start_time', '<=', $startTime)
            ->where('end_time', '>', $startTime);
    })
    ->orWhere(function ($query) use ($startTime, $endTime) {
        $query
            ->where('start_time', '<', $endTime)
            ->where('end_time', '>=', $endTime);
    });
})->count();

Надеюсь, это поможет вам!

2
Hiren Gohel 3 Янв 2018 в 07:02

Небольшой измененный запрос . Надеюсь, он подойдет всем, кто ищет алгоритм резервирования временных интервалов.

$Availability=  Availability::
                    where(function ($query) use ($start_time, $end_time) { 
                        $query
                           ->whereBetween('start_time', [$start_time, $end_time])
                           ->orWhere(function ($query) use ($start_time, $end_time) {
                                    $query
                                        ->whereBetween('end_time', [$start_time, $end_time]);
                                });
                     })->count();
0
Ayush 24 Фев 2019 в 10:09