





Вы можете использовать метод 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) работает, чтобы отклонять пустые элементы в коллекции.
На самом деле вам даже не нужен метод ->filter, если вы используете Eloquent. Если role является родственником вашей модели User, вы можете просто вызвать:
$users = User::has("role")->get();
Это автоматически вернет только пользователей, у которых есть role, или у которых $user->role не равен нулю.
Вы можете использовать метод whereNotNull(), который проверяет, является ли значение данного столбца NULL:
User::whereNotNull('role')->get();
Просто чтобы указать, что whereNotNull () - это метод Eloquent, который работает с моделью, он не будет работать с существующей коллекцией, как попросил OP.
Вы можете обернуть все в if ($row->filter()->isNotEmpty()), это сработало для меня в прошлом
Для коллекции laravel whereStrict идеально подходит для фильтрации, чтобы избежать нулевых записей.
Потому что whereStrict сравнивает значение + тип данных.
$result = $collection->whereStrict('role', null);