【问题标题】:I have a laravel project with 2 tables (users and roles). In a roles view, I am trying to display a count of users who are using that specific role我有一个带有 2 个表(用户和角色)的 laravel 项目。在角色视图中,我试图显示使用该特定角色的用户数量
【发布时间】:2020-05-11 22:01:13
【问题描述】:

我的表格区域如下

角色表(id、roleName、roleDesc)

用户表(id、姓名、角色、电子邮件)

添加新用户时,我在用户的角色列中插入一个角色,例如“管理员”。

我的问题是我想在显示角色列表的视图数据表中显示具有该角色的用户数量。例如,可以简单地是共享该角色的成员数的整数,例如 5。

在我的角色控制器中,我正在使用

获取记录
$roles = Role::all();
$users = User::all();

我已经设法显示了具有“管理员”角色的用户数量,但这当然只是复制了数据表中的所有内容,例如“1”

$RoleCount = User::where('role', '=', 'Admin')->count();

所以,我想我需要使用连接或其他东西来用当前角色名称替换上面的“管理员”。

我希望这是有道理的,我希望有人可以帮助我找到解决方案。我知道这是非常基本的,但是试图在连接中敲打我的脑袋并遇到了一些麻烦。

提前致谢。

【问题讨论】:

    标签: laravel


    【解决方案1】:

    首先使用关系会很棒(Laravel docs) 有了关系,这将非常容易。

    1. 更改用户表,因此您没有角色名称,但角色 ID = 列 id、name、role_id、email
    2. 在角色模型中添加与用户的关系,在用户模型中添加与角色的关系:

    Model User.php - 添加方法

    public function role(){
        return $this->belongsTo('App\Role'); //use your correct namespace
    }
    

    Model Role.php - 添加方法

    public function users(){
        return $this->hasMany('App\User'); //use your correct namespace
    }
    

    然后只需选择具有用户数量的所有角色:

    $roles = Role::withCount('users')->get();
    

    在你看来:

    @foreach($roles as $role)
        {{ $role->roleName }} - {{ $role->users_count }}<br>
    @endforeach
    

    【讨论】:

    • 传奇,让我试一试,有道理,谢谢Autista_z。
    • 嗨 Autista_z.,我试了一下,看起来很有希望。我将关系放入模型中,并将角色控制器中的数据库查询替换为您的查询,以选择具有用户数的所有角色。我还将您的 foreach 整合到我的视图中。不幸的是,如果我用之前的全选查找替换您的查找,我收到错误“调用 null 上的成员函数 getRelationExistenceCountQuery()”,我没有收到错误,但计数未显示在视图中。抱歉,我是新来的人际关系,谢谢你向我展示它们。它们将非常有用。你知道我可能哪里出错了吗?
    • 这看起来关系不正常。您是否为用户表 role_id 中的角色命名列?如果没有,可以在外键列的关系名中指定:$this-&gt;hasMany('App\User', 'name_of_column_in_users_table_for_role', 'name_of_primary_key_in_roles_table');
    • $users = User::with('role')-&gt;get(); 然后循环为用户@foreach($users as $user) {{ $user-&gt;role-&gt;roleName }}
    • 终于想通了。当您写“列 id、name、role_id、email”时,我错过了最顶部我错过了 role_id。我现在明白 Laravel 基本上期望这一点,并且有了这个列,它有效地使这一切正常工作。因此,我对用户表进行了更改并进行了新的迁移,能够使用您上面的代码完美地工作。谢谢Autista_z
    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多