Laravel где пункт

Я пытаюсь отфильтровать объекты по дате. Я получаю их:

$events = Event::orderBy('event_date')->with('organizers')->get();

Что работает нормально … но теперь я хотел бы разделить события на пропущенные и не пропущенные, поэтому я попытался с:

$result1 = $events->where('event_date', '<', Carbon::now());

Но он возвращает пустую коллекцию. Если я добавлю get(), это дает мне ошибку. Как ни странно, если я сделаю это так:

$result1 = $events->where('is_featured', 1);

Это работает и возвращает только избранные элементы. Что я делаю неправильно?

0

Решение

Как вы указали в своем вопросе, $ events — это коллекция, а не запрос. Метод where () в Collection работает немного по-другому.

Для коллекций метод where () не принимает оператор. Это только сравнение равенства. Первый параметр — это ключ, второй — значение, а третий — логическое значение, обозначающее произвольное сравнение (==) и строгое сравнение (===).

То, что вы ищете, это метод filter (). Вы передаете закрытие, которое выполняет сравнение дат. Если Closure возвращает true, элемент остается в коллекции. Если он возвращает false, элемент удаляется из коллекции. Примерно так (просто пример, логику, возможно, нужно настроить):

$filteredEvents = $events->filter(function ($item) use ($date) {
return (data_get($item, 'event_date') > $date) && (data_get($item, 'event_date') < $date->endOfDay());
});
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector