让所有在Laravel中扮演角色的用户

问题描述 投票:5回答:3

我正在这个具有这种结构的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;

但是总是返回所有用户的数组。

有人会知道为什么会这样吗?谢谢!

php laravel laravel-4 eloquent roles
3个回答
20
投票

[您目前在$students查询中向laravel提出的要求是,“给我所有学生,如果角色是老师,则让每个学生获得我所有的角色”

尝试使用whereHas

$students = User::whereHas(
    'roles', function($q){
        $q->where('name', 'Teacher');
    }
)->get();

这应该使您获得用户,但只有在他们的角色是老师的情况下,您才可以使用。


0
投票

尝试一下。

Role::where('rolename', 'user')->first()->users()->get()

0
投票

如果要为所有用户提供潜在角色列表:

$authorizedRoles = ['Teacher', 'Professor', 'Super professor'];

$users = User::whereHas('roles', static function ($query) use ($authorizedRoles) {
                    return $query->whereIn('name', $authorizedRoles);
                })->get();
© www.soinside.com 2019 - 2024. All rights reserved.