Фильтрация коллекции Laravel, чтобы избежать нулевых записей

есть ли встроенный способ перебирать коллекции и возвращать только те объекты, которые соответствуют определенному условию?

вроде пропустить все записи с $user->role === null

laravel.com/docs/5.6/collections#method-filter
Tobias K. 16.08.2018 16:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
1
19 791
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Вы можете использовать метод filter для фильтрации пользователей по вашему состоянию.

$filteredUsers = $users->filter(function ($user, $key) {
    return $user->role != null;
});

Это то, что у тебя не получится. См. Документы https://laravel.com/docs/5.5/collections#method-where

$result = $collection->where('role', null);

вы можете использовать функции reject, filter для достижения этого

$users = User::all();

$users->each(function($users) {
    $users->roles->reject(function($role) {
        return $role->rule === null;
    });
});

Пожалуйста, обратитесь к этому, чтобы использовать фильтр -> http://laravel.com/docs/5.6/collections#method-filter

Кроме того, collect()->reject(null) работает, чтобы отклонять пустые элементы в коллекции.

Joel Mellon 18.11.2020 01:33
Ответ принят как подходящий

На самом деле вам даже не нужен метод ->filter, если вы используете Eloquent. Если role является родственником вашей модели User, вы можете просто вызвать:

$users = User::has("role")->get();

Это автоматически вернет только пользователей, у которых есть role, или у которых $user->role не равен нулю.

Вы можете использовать метод whereNotNull(), который проверяет, является ли значение данного столбца NULL:

User::whereNotNull('role')->get();

Просто чтобы указать, что whereNotNull () - это метод Eloquent, который работает с моделью, он не будет работать с существующей коллекцией, как попросил OP.

richplane 22.07.2019 12:40

Вы можете обернуть все в if ($row->filter()->isNotEmpty()), это сработало для меня в прошлом

Для коллекции laravel whereStrict идеально подходит для фильтрации, чтобы избежать нулевых записей.

Потому что whereStrict сравнивает значение + тип данных.

$result = $collection->whereStrict('role', null);

Другие вопросы по теме