У меня есть форма, которая захватывает пользователь деталь и хотят сохранить на две отдельные модели: контактов и contract_addresses.Создания записей в нескольких моделях из одной формы с красноречивым
Ниже выход из моей $request->all()
внутри метода контроллера:
{
"first_name": "Joe",
"last_name": "Jackson",
"nickname": "JJ",
"salutation": "Mr",
"contact_address": {
"phone_mobile": "123456789",
"email": "[email protected]",
"address_1": "123 Office",
"postcode": "2334",
"address_2": "456 Lane",
"province": "New Portia",
"city": "Okalaville",
"country": "Golubia"
}
}
Я создал соответствующие отношения в моей модели следующим образом:
Контакты Модель:
public function address()
{
return $this->hasOne('App\Contact_address');
}
Контакт_Address Модель:
public function contact()
{
return $this->belongsTo('App\Contact');
}
Контроллер Метод: Вот как я есть установка методы контроллера:
public function store(Request $request)
{
$contact = new Contact($request->except("contact_address"));
$contact_address = new Contact_address($request->contact_address);
$contact->setRelation('address', $contact_address);
$contact->push();
return back();
}
Ошибки с толчком():push()
выше бросками 2 исключения SQL:
1/2 PDOException в строке Connection.php 408:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`myappdb`.`contact_addresses`, CONSTRAINT `contact_addresses_contact_id_foreign` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`))
2/2 QueryException в connection.php линии 673:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`myappdb`.`contact_addresses`, CONSTRAINT `contact_addresses_contact_id_foreign` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`)) (SQL: insert into `contact_address` (`phone_mobile`, `email`, `address_1`, `postcode`, `address_2`, `province`, `city`, `country`, `updated_at`, `created_at`) values (343434, , , , , , , , 2016-05-08 23:53:02, 2016-05-08 23:53:02))
Я подозреваю, что проблема, кажется, что внешний ключ для contact.id
не передается через при выполнении SQL вставки для адресов, даже если сам контакт действительно вставлен в таблицу контактов успешно.
Как создать новую запись в обеих таблицах?
- Должен ли я создать контакт, получить контакт.id, а затем использовать это снова, чтобы сохранить адреса?
- Лучше ли удалить ограничение внешнего ключа sql в моем db?
- Как вы бы структурировали это?
Почему вы не храните все свои данные в модели «Контакт», установив «contact_address» в качестве столбца JSON? Таким образом, вам не нужны дополнительные модели. – enriqg9
Я не думаю, что это фактически спасло Контакт. Попробуйте изменить свой код на $ contact = Contact :: create ($ request-> except ("contact_address")); – Brett