获取所有在 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 获取特定用户和特定角色
使用带有 spatie 包的 Laravel 8 尝试获取具有角色问题的用户列表调用未定义的方法 App\Models\User::hasAllRoles()