vri*_*aam 4 php roles laravel eloquent laravel-4
我在这个具有这种结构的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');
}
Run Code Online (Sandbox Code Playgroud)
榜样
class Role extends EntrustRole
{
public function Users()
{
return $this->belongsToMany('User','assigned_roles');
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来让所有具有指定角色的用户在这种情况下"教师".我试过这个:
$students = User::with(array('Roles' => function($query) {
$query->where('name','Teacher');
}))
->get();
return $students;
Run Code Online (Sandbox Code Playgroud)
但这总是返回所有用户的数组.
有人会知道为什么会这样吗?谢谢!
due*_*lsy 18
你目前在$students查询中要求laravel的是"给我所有的学生,并且如果这个角色是老师,每个学生都会得到我所有的角色"
尝试使用 whereHas
$students = User::whereHas(
'roles', function($q){
$q->where('name', 'Teacher');
}
)->get();
Run Code Online (Sandbox Code Playgroud)
这应该可以让您获得用户,但只能在他们拥有名称为教师的角色的位置.
如果您使用spatie/laravel-permission或Backpack/permissionmanager,您可以简单地执行以下操作:
$teachers = User::role('Teacher')->get();
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您想让所有用户获得潜在角色列表:
$authorizedRoles = ['Teacher', 'Professor', 'Super professor'];
$users = User::whereHas('roles', static function ($query) use ($authorizedRoles) {
return $query->whereIn('name', $authorizedRoles);
})->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10233 次 |
| 最近记录: |