Laravel集合过滤避免空记录

时间:2018-08-16 14:53:42

标签: php laravel eloquent

是否有一种内置的方法可以遍历集合并仅返回满足特定条件的对象?

喜欢跳过所有具有$user->role === null

的记录

7 个答案:

答案 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);