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();