获取管理员用户的角色名称

时间:2017-06-01 13:34:29

标签: php laravel laravel-5.4

我有管理员用户的表及其关系的角色。我希望管理员用户列表具有各自的角色。

我在下面尝试了查询

$adminusers = Admin::whereHas('roles', function($q)
        {
            $q->where('roles.name', '<>', 'Superadmin');
            $q->select('roles.name as roles');
        })->select('id', 'name')->where('admins.status', 'A')->where('admins.is_delete', '0')->paginate(15);

但我无法从中检索角色名称。

那么如何从上面的查询中获取角色名称?

2 个答案:

答案 0 :(得分:1)

您无法从whereHas闭包中进行选择。 where在这种情况下,用于限制管理员的结果,而不是检索角色。

您可以查询特定模型的关系,如下所示:

$singleAdmin->roles()->where('roles.name', '<>', 'Superadmin')->get();

或者您可以在急切加载期间设置约束:

Admin:::with(['roles' => function ($query) {
    $q->where('roles.name', '<>', 'Superadmin');
}])->get();

https://laravel.com/docs/5.4/eloquent-relationships#constraining-eager-loads

一旦加载,您就需要从$singleAdmin->roles访问角色集合。

在某些情况下,只使用联接是有意义的。

答案 1 :(得分:0)

您可以使用leftJoin方法。

`$admins = Admin::leftJoin('roles','admin.role_id','=','roles.id')
->select('id', 'name')
->where('admins.status', 'A')
->where('admins.is_delete', '0')
->paginate(15)`

或者您可以在模型文件

中执行此操作
`public function role()
{
    return $this->hasOne(\App\Models\Roles::class, 'id', 'role_id');
}`