Przestudiowałem sobie już istniejące tematy na ten temat i albo coś mi nie działało albo dotyczyło odwrotnej sytuacji czyli zwracało wolne pokoje w danym terminie.
Do rzeczy:
Tabela reservations:
obj_id (id obiejktu/pokoju do rezerwacji),
date_from (data od),
date_to (data do)
status (załóżmy, że zawsze 1),
SELECT * FROM `reservations` WHERE ((`date_from` <= $date_from AND `date_to` >= $date_from) OR (`date_from` <= $date_to AND `date_to` >= $date_to)) AND `status` = 1 AND `obj_id` = $obj_id
Zapytanie zostało wygenerowane przez kod PHP (eloquent):
protected function checkByStatus($obj_id, $date_from, $date_to, $status) { $query = $this->newQuery(); $query->where(function($query) use ($date_from, $date_to) { $query->where(function($query) use ($date_from) { $query->where('date_from', '<=', $date_from) ->where('date_to', '>=', $date_from); }); $query->orWhere(function($query) use ($date_to) { $query->where('date_from', '<=', $date_to) ->where('date_to', '>=', $date_to); }); }); $query->where('status', $status); $query->where('obj_id', $obj_id); //return dd($query->toSql()); if($query->count() == 0) return true; return false; }
Niestety powyższy kod nie działa prawidłowo i w niektórych przypadkach zwraca wolny termin pomimo, że nie jest wolny.
Bardzo proszę o pomoc w poprawieniu zapytania oraz odpowiedzenie na poniższe pytania:
1. Czy zmienne $date_to i $date_from mogą być zwykłymi stringami (2012-07-03)?
2. Czy właściwie ustawiłem typ kolumn date_from i date_to jako Date?
PS.
Jeżeli jest już na forum rozwiązanie to proszę o linka, mnie osobiście nie udało się znaleźć.