私は、ユーザーの詳細を取得し、連絡先とcontract_addressesという2つの別々のモデルに保存するフォームを持っています。1つのフォームから複数のモデルを作成してレコードを作成する
接触モデル::
public function address()
{
return $this->hasOne('App\Contact_address');
}
を次のように私は私のモデルに適切な関係を設定している
{
"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"
}
}
:以下
は、コントローラのメソッドの中から私の$request->all()
から出力され、
Contact_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例外をスロー は、ここで私はセットアップにコントローラのメソッドを持っている方法ですConnection.php行の1/2 PDOException 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 673:
私はSQLの挿入を実行するときに問題がcontact.id
の外部キーが通過されていないことのようだと思われる
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の外部キー制約を削除する方が良いですか?
- これはどのように構造化しますか?
'contact'モデルにすべてのデータを保存し、' contact_address'をJSON列として設定しないのはなぜですか?そうすれば、追加のモデルは必要ありません。 – enriqg9
私はそれが実際に連絡先を保存しているとは思わない。コードを$ contact = Contact :: create($ request-> except( "contact_address"))に変更してみてください。 – Brett