我正在这个具有这种结构的Laravel项目中工作
用户:id | first_name | ...
角色:id |名称
assigned_roles:id | user_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();
这应该使您获得用户,但只有在他们的角色是老师的情况下,您才可以使用。
尝试一下。
Role::where('rolename', 'user')->first()->users()->get()
如果要为所有用户提供潜在角色列表:
$authorizedRoles = ['Teacher', 'Professor', 'Super professor'];
$users = User::whereHas('roles', static function ($query) use ($authorizedRoles) {
return $query->whereIn('name', $authorizedRoles);
})->get();