我有表 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不为null限制1)
问题是如何从控制器或模型中查询 role_user
表,同时显示用户以显示角色名称 .
2 回答
您已经定义了表,因此一个用户可以拥有多个角色(使用一个您的
role_user
表的数据透视表 .如果用户只能拥有一个角色,则可以删除role_user表并将“
role_id
”列添加到users表中 .使用当前实现将用户模型中的
role
关系更改为以下 .在你的控制器中
要简单地显示角色的名称,请使用
implode
返回集合的方法您正在使用数据透视表来维护关系,因此您需要
belongsToMany
关系并为其定义自定义访问器,如下所示: