Я работаю над исправлением проекта и создал в модели область действия для запроса отношения, которое также выполняет замыкание:
Это область действия, это гостиница:
public function scopeIsHotelAvailable($query, $start_date, $end_date){
return $query->whereHas('isAvailableInRanges', function($q) use ($start_date, $end_date) {
$q->isAvailableInRanges($start_date, $end_date);
});
}
Когда я даже пытаюсь запустить это, я получаю следующую ошибку:
$hotel->ishotelavailable($start, $end);
TypeError: Too few arguments to function Modules/Hotel/Models/Hotel::isAvailableInRanges(), 0 passed in /home/ffuentes/pk2/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php on line 475 and exactly 2 expected
Я видел это раньше, но я не знаю, как заставить Eloquent распознавать аргументы.
РЕДАКТИРОВАТЬ:
Этот метод вызывается из замыкания, которое является частью модели Hotel.
public function isAvailableInRanges($start_date,$end_date){
$days = max(1,floor((strtotime($end_date) - strtotime($start_date)) / DAY_IN_SECONDS));
if($this->default_state)
{
$notAvailableDates = $this->hotelDateClass::query()->where([
['start_date','>=',$start_date],
['end_date','<=',$end_date],
['active','0']
])->count('id');
if($notAvailableDates) return false;
}else{
$availableDates = $this->hotelDateClass::query()->where([
['start_date','>=',$start_date],
['end_date','<=',$end_date],
['active','=',1]
])->count('id');
if($availableDates <= $days) return false;
}
// Check Order
$bookingInRanges = $this->bookingClass::getAcceptedBookingQuery($this->id,$this->type)->where([
['end_date','>=',$start_date],
['start_date','<=',$end_date],
])->count('id');
if($bookingInRanges){
return false;
}
return true;
}
Суть всего этого заключается в проверке результатов запроса на соответствие этим результатам и фильтрации их. Тогда, когда я начал пробовать это, я просто отфильтровал коллекцию, но она не работала, потому что возвращенная коллекция не включала нумерацию страниц и красноречивые элементы, которые она обычно несет в себе.