我有一个表单,可以捕获用户详细信息并希望保存到两个单独的模型中:contacts 和 contract_addresses。
下面是 Controller 方法中我的 $request->all()
的输出:
{
"first_name": "Joe",
"last_name": "Jackson",
"nickname": "JJ",
"salutation": "Mr",
"contact_address": {
"phone_mobile": "123456789",
"email": "jj@jackson.com",
"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');
}
Contact_Address 型号:
public function contact()
{
return $this->belongsTo('App\Contact');
}
Controller 方法: 以下是我设置 Controller 方法的方法:
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() 错误: 上面的 push()
抛出 2 个 SQL 异常:
Connection.php 第 408 行中的 1/2 PDOException:
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`))
Connection.php 第 673 行中的 2/2 QueryException:
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))
我怀疑问题似乎是在对地址执行 SQL 插入时,contact.id
的外键没有被传递,即使联系人本身确实被插入到联系人中建表成功。
如何在两个表中创建新记录?
- 我是否必须创建联系人、检索 contact.id,然后再次使用它来保存地址?
- 删除数据库中的 sql 外键约束是否更好?
- 您将如何构建它?
最佳答案
使用保存
方法。
public function store(Request $request) {
$contact = Contact::create($request->except(["contact_address"]));
$contact_address = new Contact_address($request->get('contact_address'));
$contact->contact_address()->save($contact_address);
return back();
}
关于mysql - 使用 eloquent 从一种形式在多个模型中创建记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37106185/