mysql - 使用 eloquent 从一种形式在多个模型中创建记录

标签 mysql laravel eloquent

我有一个表单,可以捕获用户详细信息并希望保存到两个单独的模型中:contactscontract_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/

相关文章:

laravel - 跳过并全部拿走?

mysql - 如何最小化 mysqld 写入磁盘的字节数?

mysql - 如果条件匹配但有后备,如何获取 mysql 查询

MYSQL查询匹配两个表中的多个值

Laravel 结合了 Passport 身份验证和普通身份验证

php - 无法从 Laravel 中的 SQLite 表中删除

mysql - 如何将急切加载的 Eloquent 查询更改为简单的 mysql 查询

mysql - MAGENTO:找不到 catalog_product 表。 $installer->getTable ('catalog/product' ) 如何工作呢?

php - 在 Laravel 5.2 中找不到类 'App\Http\Controllers\Session'

php - 组合访问器和修改器逻辑以将自定义属性添加到模型