雄辩的用户与Entrust库的条款

时间:2015-11-28 04:34:44

标签: laravel laravel-5 eloquent roles entrust

我试图为公司选择所有用户。但只有拥有" admin"角色状态(委托等)。

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

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

2 个答案:

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