我正在尝试为公司选择所有用户。但仅限于具有“管理员”角色状态(委托等)的用户。
User::where('company_id', Auth::user()->company_id)->hasRole('admin')->get();
上面是抛出一个错误。对如何运行这样的查询有点迷失。我哪里错了?关于 Entrust 的文档很少。
认为您需要让所有用户都拥有第company_id
一个
$users = User::where('company_id', Auth::user()->company_id)->get();
然后循环$users
检查hasRole()
foreach ($users as $user) {
if($user->hasRole('admin')){
//user is admin
}
}
更新
这可能是一个肮脏的解决方案,但您可以尝试进行手动查询
$admin = DB::table('role_user')
->join('users', 'users.id', '=', 'role_user.user_id')
->join('roles', 'roles.id', '=', 'role_user.role_id')
->where('roles.name', 'admin')->get();
您可以为此使用普通的 Eloquent。该whereHas
方法将生成一个查询:
$users = User::where('company_id', Auth::user()->company_id)
->whereHas('roles', function($query) {
$query->where('name', 'admin');
})->get();
或者,您可以只获取角色,然后获取该角色的所有用户。这将生成两个查询,但最终实现相同的目标。
$users = Role::where('name', 'admin')
->first()
->users()
->where('company_id', Auth::user()->company_id)
->get();