我试图为公司选择所有用户。但只有拥有" admin"角色状态(委托等)。
User::where('company_id', Auth::user()->company_id)->hasRole('admin')->get();
以上是抛出错误。如何运行这样的查询有点丢失。我哪里错了?关于Entrust的文档很少。
答案 0 :(得分:1)
认为您需要让所有用户首先拥有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();
答案 1 :(得分:1)
您可以使用简单的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();