如何使用eloquent和Entrust获得角色='admin'的角色的所有用户?

时间:2015-06-09 20:02:12

标签: php laravel eloquent laravel-5

我正在使用Laravel Entrust Package https://github.com/Zizaco/entrust 我想让所有用户都有这样的角色

name | role

Ryan | admin
Megan | admin

表格结构

users 
id,name,email,password

roles, 
id,name

role_user (pivot table)
id,user_id

我尝试了这个但是不起作用

$users = User::with('roles')->where('roles.name','=','admin')->get();

错误

Column not found: 1054 Unknown column 'roles.name' in 'where clause' (SQL: select * from users where roles.name = admin)

我不想既不使用RAW查询也不想使用

$users = DB::table('users')->select('users.name as username', 'role.name as role')->with('roles')->join('roles', 'roles.user_id', '=', 'users.id')->where('roles.name', 'admin')->get();

还有其他方法吗?

2 个答案:

答案 0 :(得分:7)

使用whereHas

$users = User::whereHas('roles', function($q)
{
    $q->where('name', 'admin');
})->get();

答案 1 :(得分:1)

使用此功能,它将检索具有管理员角色的所有用户

$users = User::with(['roles' => function($query)
{
    $query->where('name','=','admin');
}])->get();