Eloquent 带有委托库的用户 Where 子句
Eloquent User Where Clause with Entrust Library
我正在尝试 select 公司的所有用户。但仅限具有 "admin" 角色状态(委托等)的用户。
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();
我正在尝试 select 公司的所有用户。但仅限具有 "admin" 角色状态(委托等)的用户。
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();