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

时间:2014-03-18 17:57:53

标签: php laravel laravel-4 eloquent roles

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

角色模型

class Role extends EntrustRole
{
public function Users()
{
    return $this->belongsToMany('User','assigned_roles');
}


} 

我正在寻找一种方法来让所有具有指定角色的用户在这种情况下“老师”#39;我试过这个:

$students = User::with(array('Roles' => function($query) {
        $query->where('name','Teacher');
    }))
    ->get();
    return $students;

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

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

3 个答案:

答案 0 :(得分:0)

尝试一下。

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

如果您使用的是laravel许可包,

在控制器中,

$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