У меня следующая структура таблицы:
Таблица пользователей
user_id
username
password
Таблица ролей
role_id
role_name
Таблица окружений
environment_id
environment_name
и иметь сводную таблицу для сохранения отношения следующим образом
Таблица User_Roles_Environments
user_id
role_id
environment_id
Пользователям можно назначить несколько ролей и добавить их в несколько сред.
Я добавил следующие отношения к классам модели
Environment. php
public function roles() {
return $this->belongsToMany(
'App\Models\Role',
'user_roles_environments'
)->withPivot('user_id');
}
public function users(){
return $this->belongsToMany(
'App\Models\User',
'user_roles_environments'
)->withPivot('role_id');
}
Пользователь. php
public function environments(){
return $this->belongsToMany(
'App\Models\Environment',
'user_roles_environments'
)->withPivot('role_id');
}
public function roles()
{
return $this->belongsToMany(
'App\Models\Role',
'user_roles_environments'
)->withPivot('environment_id');
}
Роль. php
public function environments() {
return $this->belongsToMany(
'App\Models\Environment',
'user_roles_environments'
)->withPivot('user_id');
}
public function users() {
return $this->belongsToMany(
'App\Models\User',
'user_roles_environments'
)->withPivot('environment_id');
}
Теперь, Это правильный способ определения отношений в соответствии со структурой таблицы? Когда я сохраняю пользователя, я даю соответствующие role_ids (можно выбрать несколько ролей) и environment_ids (можно выбрать несколько сред). Я попробовал следующий код, чтобы установить связь.
foreach($request->input('user_roles') as $userRole) {
$user->roles()->attach($userRole);
}
foreach($request->input('user_role_environments') as $userEnvironment) {
user->environments()->attach($userEnvironment);
}
где ввод дает role_ids
и environment_ids
. Но я получаю следующую ошибку SQL:
сообщение: «SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'role_role_id' в 'списке полей' (SQL: вставить в user_roles_environments
(role_role_id
, user_user_id
) значения (ROLE_ID, 0))
Здесь отображаются только два поля. Как мне добавить к нему environment_id
?