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

Php 从集合中删除项更改其类型-Laravel,php,laravel,collections,eloquent,Php,Laravel,Collections,Eloquent,我使用的是Laravel5.4。此代码检索属于公司的用户并将其返回到客户端 下面的查询用于获取公司的用户 $users = User::where('company_id', '=', $idCompany) ->with([ 'roles' => function($q) { $q->whereBetween('level', [50, 999]);

我使用的是
Laravel5.4
。此代码检索属于公司的用户并将其返回到客户端

下面的查询用于获取公司的用户

$users = User::where('company_id', '=', $idCompany)
            ->with([
                'roles' => function($q) {
                    $q->whereBetween('level', [50, 999]);
                }
            ])->get();
情景A
$users
是一个对象数组
[{user1},{user2}]

情景B 我从集合和

$users
是对象的对象
{{user1}、{user2}

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

  • 如何在维护时从集合中删除某些项目 对象数组
  • 编辑 下面是正确的查询

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

    操作集合后,需要添加
    ->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();
    

    为什么不通过集合进行筛选,
    return$users->filter(function($user){return$user->roles->count();})。另外,我认为您的第一个查询是不正确的,您应该使用
    whereHas
    来代替
    with
    ,但我希望加载用户的角色。我需要一个
    whereHas
    以及一个
    带有
    的($users=User::whereHas('roles',function($query){$query->whereBetween('level',[50999]);})->带有('roles')->where('company_id','=','idCompany get();返回$users`
    
    $filtered = $users->reject(function ($value, $key) {
        return count($user->roles) == 0;
    });
    
    return $filtered->all();
    
    $users = User::whereHas('roles', function ($query) {
        $query->whereBetween('level', [50, 999]);
    })
    ->where('company_id', '=', $idCompany)
    ->get();