获取Laravel中具有角色的所有用户


Get all users with role in Laravel

我在这个Laravel项目中工作,它有这个结构

users: id | first_name |…

roles: id | name

assigned_roles : id | user_id | role_id

我认为这很明显:p

用户模型

class User extends ConfideUser {
use HasRole;
public function Roles(){
    return $this->belongsToMany('Role','assigned_roles');
}

榜样

class Role extends EntrustRole
{
public function Users()
{
    return $this->belongsToMany('User','assigned_roles');
}

} 

我正在寻找一种方法来获得所有用户与指定的角色在这种情况下'教师'。我试过了:

$students = User::with(array('Roles' => function($query) {
        $query->where('name','Teacher');
    }))
    ->get();
    return $students;

但是这总是返回一个包含所有用户的数组。

有人知道为什么会这样吗?谢谢!

您当前在$students查询中要求laravel的是'给我所有学生,如果角色是教师,则为每个学生获取他们的所有角色'

尝试使用whereHas

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

这应该可以得到用户,但只有在他们有一个名为teacher的角色的情况下。

如果您正在使用space/larvel -permission或backpack/permissionmanager,您可以简单地执行:

$teachers = User::role('Teacher')->get();

如果您想获得所有用户的潜在角色列表:

$authorizedRoles = ['Teacher', 'Professor', 'Super professor'];
$users = User::whereHas('roles', static function ($query) use ($authorizedRoles) {
                    return $query->whereIn('name', $authorizedRoles);
                })->get();

试试这个

Role::where('rolename', 'user')->first()->users()->get()

如果您使用的是laravel-permission package,那么

在控制器中,

$rolesWithUserCount = Role::withCount('users')->get();

在刀片文件中

@foreach ($rolesWithUserCount as $item)
          {{ $item->name }}
          {{$item->users_count }}
@endforeach
输出:

Role1 Role1Count 
Role2 Role2Count
 ....

更多:访问:https://laravel.com/docs/7.x/eloquent-relationships counting-related-models