Фильтр Laravel показывает исключение BadMethodCallException - PullRequest
1 голос
/ 22 января 2020

У меня есть коллекция из запроса ниже

$order = $company->Orders()
            ->whereBetween('created_at', [$this->start_date, $this->end_date])
            ->whereNull('is_cancel')
            ->whereNull('is_removed')
            ->whereNull('deleted_at');

Теперь я хочу отфильтровать все ордера с истекшим сроком действия

$orders = $orders->filter(function($value,$key){
                return  $this->expiry($value) < Carbon::now();
            });

код выше выдает ошибку

BadMethodCallException with message 'Call to undefined method Illuminate/Database/Query/Builder::filter()'

Я могу использовать $orders->get()->filter(), но мне нужно проверить furthur в коллекции для подсчетов и картирования и т.д. c, поэтому я не хочу использовать get here. Любая помощь очень ценится.

1 Ответ

2 голосов
/ 22 января 2020

filter не определено, поскольку это метод, определенный в коллекции, а не в построителе запросов. Что вам нужно сделать, это получить результаты перед их фильтрацией:

$orders = $company
    ->Orders()
    ->whereBetween('created_at', [$this->start_date, $this->end_date])
    ->whereNull('is_cancel')
    ->whereNull('is_removed')
    ->whereNull('deleted_at')
    ->get()
    ->filter(function($value) {
        return $this->expiry($value) < Carbon::now();
    });
...