У меня есть стол role_user
который имеет две колонки user_id
а также role_id
, user_id
это идентификатор пользователя от users
стол и role_id
это идентификатор от roles
Таблица.
Я хочу запросить 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 Неизвестный столбец ‘role.user_id’ в ‘предложении where’ (SQL: select * from
roles
гдеroles
,user_id
является нулевым иroles
,user_id
не является нулевым пределом 1)
Вопрос в том, как сделать запрос role_user
таблица из контроллера или из модели и при отображении пользователей для отображения имени роли тоже.
Вы определили свою таблицу так, чтобы один пользователь мог иметь много ролей (используя сводную 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
метод возврата коллекции
@foreach ($users as $user)
{{ $user->roles->implode('name', ',') }}
@endforeach
Вы используете сводную таблицу для поддержания отношений, поэтому вам нужно
belongsToMany
Отношение и определение пользовательского метода доступа для него, например, так:
//User model file
public function roles()
{
return $this->belongsToMany(App\Role::class);
}
public function getRoleAttribute()
{
return $this->roles()->first();
}