我的表格role_user
有两列user_id
和role_id
。 user_id
是users
表中的用户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
其中roles
。user_id
为null和roles
。user_id
不是空限制1)
问题是如何从控制器或模型中查询role_user
表,同时显示用户以显示角色名称。
答案 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();
}