是否有一种内置的方法可以遍历集合并仅返回满足特定条件的对象?
喜欢跳过所有具有$user->role === null
答案 0 :(得分:6)
您可以使用filter
方法根据您的条件过滤用户
$filteredUsers = $users->filter(function ($user, $key) {
return $user->role != null;
});
答案 1 :(得分:6)
如果您使用的是->filter
,实际上甚至不需要Eloquent
方法。如果role
是您的User
模型的关系,则可以简单地调用:
$users = User::has("role")->get();
这将自动仅返回具有role
或$user->role
不为null的用户。
答案 2 :(得分:3)
您可以使用whereNotNull()
方法来验证给定列的值是否为NULL:
User::whereNotNull('role')->get();
//Or
DB::table('users')->whereNotNull('role')->get();
答案 3 :(得分:2)
您可以使用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
答案 4 :(得分:1)
这是你不会的。参见文档https://laravel.com/docs/5.5/collections#method-where
$result = $collection->where('rule', null);
答案 5 :(得分:0)
您可以将所有内容包装在if($row->filter()->isNotEmpty())
中,这过去对我有用
答案 6 :(得分:0)
对于laravel收集,whereStrict
非常适合进行过滤以避免空记录。
因为whereStrict比较值+数据类型。
$result = $collection->whereStrict('role', null);