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