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

Posted

技术标签:

【中文标题】获取所有在 Laravel 中具有角色的用户【英文标题】:Get all users with role in Laravel 【发布时间】:2014-04-24 14:29:20 【问题描述】:

我正在这个具有这种结构的 Laravel 项目中工作

用户:id |名字 |...

角色:id |名字

assigned_roles:id |用户 ID |角色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;

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

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

【问题讨论】:

【参考方案1】:

如果您使用的是spatie/laravel-permission 或backpack/permissionmanager,您可以这样做:

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

【讨论】:

【参考方案2】:

如果你使用的是 laravel-permission 包,那么,

在控制器中,

$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

【讨论】:

【参考方案3】:

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

$authorizedRoles = ['Teacher', 'Professor', 'Super professor'];

$users = User::whereHas('roles', static function ($query) use ($authorizedRoles) 
                    return $query->whereIn('name', $authorizedRoles);
                )->get();

【讨论】:

【参考方案4】:

试试这个。

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

【讨论】:

【参考方案5】:

您目前在 $students 查询中询问 laravel 的内容是“给我所有的学生,如果角色是老师,每个学生都给我他们的所有角色”

尝试使用whereHas

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

这应该让您成为用户,但仅限于他们的角色名称是教师。

【讨论】:

它解决了问题:) 还有其他方法可以检索这个,因为这可能会出现性能问题。我们是否应该考虑在角色的 user_id 上使用索引? 你可以使用这个非常好的包,github.com/mpyw/eloquent-has-by-non-dependent-subquery

以上是关于获取所有在 Laravel 中具有角色的用户的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4.2 Eloquent 获取特定用户和特定角色

如何根据用户在 Laravel 5 中的角色选择用户?

在 Laravel 中创建具有角色的用户时需要帮助

使用带有 spatie 包的 Laravel 8 尝试获取具有角色问题的用户列表调用未定义的方法 App\Models\User::hasAllRoles()

Laravel Eloquent - 返回具有特定角色的用户(多对多关系)

Laravel - 我有一个具有不同角色的用户模型。如何在具有特定角色的用户之间建立关系? [关闭]