我在这个具有这种结构的Laravel项目中工作
用户:id | first_name | ...
角色:id |名称
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');
}
}
我正在寻找一种方法来让所有具有指定角色的用户在这种情况下“老师”#39;我试过这个:
$students = User::with(array('Roles' => function($query) {
$query->where('name','Teacher');
}))
->get();
return $students;
但这总是返回所有用户的数组。
有人会知道为什么会这样吗? 谢谢!
答案 0 :(得分:0)
尝试一下。
Role::where('rolename', 'user')->first()->users()->get()
答案 1 :(得分:0)
如果要为所有用户提供潜在角色列表:
$authorizedRoles = ['Teacher', 'Professor', 'Super professor'];
$users = User::whereHas('roles', static function ($query) use ($authorizedRoles) {
return $query->whereIn('name', $authorizedRoles);
})->get();
答案 2 :(得分:0)
如果您使用的是laravel许可包,
在控制器中,
$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