Laravel

时间:2017-09-07 05:37:58

标签: php laravel laravel-5

我的表格role_user有两列user_idrole_iduser_idusers表中的用户ID,role_id是来自roles表的ID。

我想查询role_user并在每个用户旁边显示角色名称。示例

users

user_id username ...
   1      Test user

roles

role_id  role_name
   1       Admin

role_user

user_id   role_id
  1          1

我想在页面上显示

Test user - Admin

我已将此添加到我的Users模型

public function role()
{
    return $this->hasOne('App\Role', 'user_id', 'role_id');
}

这在控制器中

public function users()
{
    $userRole = User::find(1)->role;

    return View::make('users', [
        'userRole' => $userRole
    ]);
}

目前我已经明白为什么这样做了:

  

SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'roles.user_id'(SQL:select * from roles其中rolesuser_id为null和rolesuser_id不是空限制1)

问题是如何从控制器或模型中查询role_user表,同时显示用户以显示角色名称。

2 个答案:

答案 0 :(得分:1)

您已经定义了表格,因此一个用户可以拥有多个角色(使用您的barcode表格的数据透视。

如果用户只能拥有一个角色,您可以删除role_user表并向用户表中添加一列role_user

使用您当前的实施,将用户模型中的role_id关系更改为以下内容。

role

在您的控制器中

public function roles()
{
    return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
}

要简单地显示角色的名称,请使用返回集合的public function users() { $users= User::with('roles')->get(); return View::make('users', [ 'users' => $users ]); } 方法

implode

答案 1 :(得分:-1)

您正在使用数据透视表来维护您需要的关系  belongsToMany关系并为其定义自定义访问器,如下所示:

//User model file
public function roles()
{
    return $this->belongsToMany(App\Role::class);
}

public function getRoleAttribute()
{
    return $this->roles()->first();
}