当前位置: 首页 > 知识库问答 >
问题:

获取Laravel中具有角色的所有用户

从阎宝
2023-03-14

我在一个有这种结构的拉威尔项目中工作

用户:id | first | u name |。。。

角色:id|name

分配的角色:id |用户id |角色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;

但这总是返回一个包含所有用户的数组。

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

共有3个答案

何灿
2023-03-14

如果您想让所有用户具有潜在角色列表:

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

$users = User::whereHas('roles', static function ($query) use ($authorizedRoles) {
                    return $query->whereIn('name', $authorizedRoles);
                })->get();
燕靖
2023-03-14

试试这个。

Role::where('rolename', 'user')->first()->users()->get()
龙嘉誉
2023-03-14

你现在在你的$学生查询中要求laravel的是“给我所有的学生,如果每个学生的角色是老师,给我他们所有的角色”

尝试使用whereHas

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

这应该会让你得到用户,但只有当他们有一个名为teacher的角色时。

 类似资料:
  • 我搜索了以下内容:,但没有找到任何内容。 JDA版本:

  • 有没有一种方法可以在Laravel中检索具有所有属性的模型,即使这些属性为空?它似乎只返回属性不为null的模型。 原因是我有一个函数,如果模型中存在属性,它将从数组中更新模型属性。在设置模型之前,我使用property_exists()函数检查模型是否具有特定属性。数组键和模型属性应该匹配,所以它就是这样工作的。 如果模型已经设置了属性,它可以正常工作,因为属性存在并从数组中获取值。但是,如果属

  • 我有3个表:User、Role和具有Role\u id和User\u id的透视表RoleUser。 对于关系在我的模型我这样做: 榜样: 用户模型: 我为filter by one角色做了这项工作,效果很好: 但是现在我需要通过许多角色来过滤我的用户。 我将从我的前端发送一个数组,其中包含角色的id。 事实上,我可以得到如下角色 但我不知道如何才能获得具有此角色的用户。

  • 我想在laravel中创建一个RBAC系统,其中一个用户可以属于多个角色,每个角色可以有多个权限。中间件应在继续请求之前检查用户是否具有特定权限(在其任何角色内)。 我能够实施一个案例,其中 用户属于一个具有多个权限的角色 我需要实现具有多个权限的多个角色的用户。有什么指点吗?

  • 这是用户模型: 这是榜样: 正如您所看到的,这两个模型之间存在多对多关系。 现在我想得到一个用户角色的ID数组。为此我写了这个: 但上面的代码返回一个数组,其中包含引用用户拥有的每个角色ID的对象: 但是我想返回一个角色的ID数组,如下所示: 我怎么能那样做?

  • 亲爱的人们。 最近,我开始更多地使用Laravel模型和雄辩的关系,而不是编写原始查询。 问题:我无法访问表“roles”的任何字段变量。$user->roles->role_name或role_description。