0

我正在尝试为公司选择所有用户。但仅限于具有“管理员”角色状态(委托等)的用户。

User::where('company_id', Auth::user()->company_id)->hasRole('admin')->get();

上面是抛出一个错误。对如何运行这样的查询有点迷失。我哪里错了?关于 Entrust 的文档很少。

4

2 回答 2

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();
于 2015-11-28T06:49:02.513 回答
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();
于 2015-11-28T07:33:10.080 回答