我正在使用Laravel 5.4
。此代码检索属于公司的用户并将其返回给客户端。
以下查询用于获取公司用户
$users = User::where('company_id', '=', $idCompany)
->with([
'roles' => function($q) {
$q->whereBetween('level', [50, 999]);
}
])->get();
return $users;
$users
是一个对象数组[{user1}, {user2}]
foreach($users as $key=> $user) {
if(count($user->roles) == 0){$users->forget($key);}
}
return $users;
我从集合和
中删除了一些项目 $users
是对象{{user1}, {user2}}
从集合中删除项似乎会更改变量$users
这是正确的查询
$users = User::whereHas('roles', function ($query) {
$query->whereBetween('level', [50, 999]);
})
->with('roles')
->where('company_id', '=', $idCompany)
->get();
return $users;
答案 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();