从集合中删除项目会更改其类型 - Laravel

时间:2017-04-26 00:03:08

标签: php laravel collections eloquent

我正在使用Laravel 5.4。此代码检索属于公司的用户并将其返回给客户端。

以下查询用于获取公司用户

$users = User::where('company_id', '=', $idCompany)
            ->with([
                'roles' => function($q) {
                    $q->whereBetween('level', [50, 999]);
                }
            ])->get();

情况A

return $users;

$users是一个对象数组[{user1}, {user2}]

情况B

 foreach($users as $key=> $user) {
   if(count($user->roles) == 0){$users->forget($key);}
 }
return $users;

我从集合和

中删除了一些项目

$users是对象{{user1}, {user2}}

的对象

从集合中删除项似乎会更改变量$users

的类型
  1. 如何在维护时从集合中删除某些项目 对象数组?
  2. 修改

    这是正确的查询

    $users = User::whereHas('roles', function ($query) {
                $query->whereBetween('level', [50, 999]);
            })
                ->with('roles')
                ->where('company_id', '=', $idCompany)
                ->get();
    
            return $users;
    

1 个答案:

答案 0 :(得分:0)

操作集合后,您需要添加->all()以获取剩余集合;

return $users->all();

你也可以这样做

$filtered = $users->reject(function ($value, $key) {
    return count($user->roles) == 0;
});

return $filtered->all();

正如Alex在评论中提出的那样,您可以使用whereHas()代替with()来直接获得角色介于50到999之间的所有用户

$users = User::whereHas('roles', function ($query) {
    $query->whereBetween('level', [50, 999]);
})
->where('company_id', '=', $idCompany)
->get();