Я использую Laravel 6. У меня есть форма для создания встречи. Я хочу создать собственный валидатор, чтобы проверить, занята ли комната в это время. Параметры запроса: "room", "date_meeting", "start" и "end".
Другими словами, я хочу сделать следующий запрос MySQL с Laravel:
SELECT *
FROM `meetings`
WHERE id_room = 1 AND date = '2021-03-02' AND ((start_hour >= '22:00:00' AND start_hour < '23:00:00') OR (start_hour < '22:00:00' AND end_hour >= '23:00:00') OR (end_hour > '22:00:00' AND end_hour <= '23:00:00'))
Я создал следующий запрос с Laravel, но он не работает правильно:
public function passes($attribute, $value)
{
$meetings = DB::table('meetings')
->where('id_room', request('room'))
->where('date', request('date_meeting'))
->where(function ($query) {
$query->where('start_hour', '>=', request('start'))
->where('start_hour', '<', request('end'));
})
->orWhere(function ($query) {
$query->where('start_hour', '<', request('start'))
->where('end_hour', '>=', request('end'));
})
->orWhere(function ($query) {
$query->where('end_hour', '>', request('start'))
->where('end_hour', '<=', request('end'));
})
->get();
if(count($meetings) > 0) {
return false;
} else {
return true;
}
}
Комната и дата работают правильно в Laravel ... но время не работает хорошо. У вас есть идея, почему она не работает правильно?