Красноречиво, как передать параметры в отношения - PullRequest
0 голосов
/ 16 января 2020

Код, который я пытаюсь исправить, выглядит следующим образом. У меня есть класс 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;
    }

Я хотел отфильтровать отели по этому запросу. Итак, это запрос от контроллера:

    $list = $model_hotel->with(['location','hasWishList','translations','termsByAttributeInListingPage'])->get();

Возможно ли передать диапазон дней функции?

Кстати, первое, что я попробовал, это использовать коллекцию после запроса и пропустить функцию фильтрации через коллекцию и после этого разбивать на страницы вручную, хотя, хотя и выполняет фильтрацию, но, очевидно, теряет результат "Eloquent". установите свойства коллекции, и она станет обычной коллекцией, поэтому у меня не получится.

1 Ответ

0 голосов
/ 16 января 2020

Возможно, лучший подход для этого - создать область запроса ( источник ) и поместить все свои логи c внутрь этой функции.

после этого вы можете вызвать эту область и передать даты. Например, вы создадите область запроса и вставите в нее свой код.

public function scopeisAvailableInRanges($query, $start_date, $end_date) {
}

, затем вы вызовете эту область запроса в своем контроллере следующим образом.

$list = $model_hotel::isavailableinranges($start_date, $end_date)->with(['location','hasWishList','translations','termsByAttributeInListingPage'])->get();

имейте в виду, что внутри вашей области запроса вы вернете коллекцию. Коллекция всех доступных отелей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...