【问题标题】:Get all users with role in Laravel获取所有在 Laravel 中具有角色的用户
【发布时间】:2014-04-24 14:29:20
【问题描述】:

我正在这个具有这种结构的 Laravel 项目中工作

用户:id |名字 |...

角色:id |名字

assigned_roles: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;

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

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

【问题讨论】:

    标签: php laravel laravel-4 eloquent roles


    【解决方案1】:

    如果您使用的是spatie/laravel-permissionbackpack/permissionmanager,您可以这样做:

    $teachers = User::role('Teacher')->get();
    

    【讨论】:

      【解决方案2】:

      如果你使用的是 laravel-permission 包,那么,

      在控制器中,

      $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

      【讨论】:

        【解决方案3】:

        如果您想获取所有用户的潜在角色列表:

        $authorizedRoles = ['Teacher', 'Professor', 'Super professor'];
        
        $users = User::whereHas('roles', static function ($query) use ($authorizedRoles) {
                            return $query->whereIn('name', $authorizedRoles);
                        })->get();
        

        【讨论】:

          【解决方案4】:

          试试这个。

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

          【讨论】:

            【解决方案5】:

            您目前在 $students 查询中询问 laravel 的内容是“给我所有的学生,如果角色是老师,每个学生都给我他们的所有角色”

            尝试使用whereHas

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

            这应该让您成为用户,但仅限于他们的角色名称是教师。

            【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-10-06
            • 2023-03-21
            • 2015-01-09
            • 1970-01-01
            • 2014-05-08
            • 2016-06-18
            • 2021-12-22
            • 1970-01-01
            相关资源
            最近更新 更多