首页 > 解决方案 > 如何在laravel中仅显示用户表中的管理员名称

问题描述

我有一个用户表:

用户表

我在用户和角色之间有一个关系:

好榜样 :

public function users()
{
    return $this->belongsToMany(User::class);
}

用户型号:

public function roles()
{
    return $this->belongsToMany(Role::class);
}

我有这样的节目用户视图:

<select class="col-12 border mt-2 pt-2" name="reciever">
        @foreach($users as $user)
                <option value="">{{ $user->name }}</option>
        @endforeach
</select>

这是控制器:

$users = User::all();
return view('Form1.add', compact('users'));

但在视图中,我只想显示具有管理员角色的用户,我该怎么做?

这是角色表:

角色表

这是用户和角色之间的数据透视表,如下所示:

用户和角色之间的数据透视表

我只想显示具有管理员角色的用户。

标签: phplaravellaravel-5relation

解决方案


您需要使用该whereHas()方法根据User分配Role的记录(通过roles()关系)查询您的记录:

https://laravel.com/docs/7.x/eloquent-relationships#querying-relationship-existence

$adminUsers = User::whereHas('roles', function ($subQuery) { 
  $subQuery->where('name', 'Admin');
}->get();

或者,您可以查询Role它的User记录(通过users()关系):

$adminUsers = Role::where('name', 'Admin')->firstOrFail()->users;

任何一种方法都会返回User与您的管理员关联的记录Role


推荐阅读