У меня есть приложение Laravel, и я переношу старую базу данных в новую базу данных. Я внес некоторые изменения в свои таблицы, добавил несколько новых таблиц и удалил некоторые таблицы. Для этого я создал сценарий миграции.Сохранить связь с несколькими столбцами
У меня есть пользователь. Этот пользователь назначается школе и группе. В моей старой базе данных пользователю была назначена одна школа и одна группа. Итак, у меня был столбец в моей таблице пользователей с именем «group_id» и столбец с именем «school_id».
Теперь я создал таблицу сопоставления (я думаю, это правильное английское слово для этого), поскольку пользователь должен быть назначен нескольким школам и нескольким группам.
Пользователи таблица:
ID | имя пользователя | пароль | подробнее ...
школы стол:
ID | имя | адрес | подробнее ...
Группы стол:
ID | имя | псевдоним | подробнее ...
group_user table:
ID | group_id | user_id | school_user_id
user_school table:
ID | user_id | school_id
Как вы можете видеть, я также добавил также идентификатор school_user отношению к таблице отображения, из-за того, что делает его легче работать в моем приложении. Если я удалю пользователя из школы, я могу с помощью внешнего ключа удалить отношение group_user. Причина проста: пользователь должен быть назначен в школу, иначе он не может быть в группе.
Моего Laravel контроллер для сохранения пользователя является:
$user = new User;
$user->id = $gebruiker->id;
$user->username = $gebruiker->gebruikersnaam;
$user->password_md5 = $gebruiker->wachtwoord;
$user->firstname = $gebruiker->voornaam;
$user->prefix = $gebruiker->tussenvoegsel;
$user->lastname = $gebruiker->achternaam;
$user->phonenumber = $gebruiker->telefoonnummer;
$user->emailaddress = $gebruiker->email;
$user->gender = ($gebruiker->geslacht == 'man' ? 'male' : 'female');
$user->birthdate = $gebruiker->geboortedatum;
$user->save();
$user->groups()->sync(array('group_id' => $gebruiker->groep_id));
$user->schools()->sync(array($gebruiker->school_id));
Моей модель пользователя имеет два метода:
public function schools()
{
return $this->belongsToMany('School');
}
public function groups()
{
return $this->belongsToMany('Group');
}
Я могу сохранить отношения для школ. Это легко из-за таблицы сопоставления. School_user имеет два столбца. Ларавел делает трюк для меня. Но, в таблице group_user Я три колонки
Я пытался сделать мой контроллер для сохранения отношений, как это:
$user->groups()->sync(array('group_id' => $gebruiker->groep_id, 'school_id' => $gebruiker->school_id));
Но, к сожалению, не работают. Может ли кто-нибудь сказать мне, что делать?
EDIT: Извините! Я не задал правильный вопрос. Я сделал редактирование этого сообщения, которое я сделал italic.
Привет, я сделал редактирование на свой пост. – Marten
См. Обновление выше относительно привязки/отсоединения по сравнению с синхронизацией и настройку 'school_user_id' в таблице' group_user'. Я также редактировал определение 'ownToMany' вверху, чтобы отразить ваше изменение в имени поля как« school_user_id ». – damiani
Хм, у меня есть эта ошибка. Я не могу понять, почему. SQLSTATE [23000]: Нарушение ограничения целостности: 1048 Столбец «school_user» не может быть нулевым (SQL: insert в значения «group_user» ('group_id',' school_user', 'user_id') (7061,, 26)). В school_user есть строка. – Marten