我在这个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