2016-05-09 14 views
0

私は、ユーザーの詳細を取得し、連絡先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:

Connection.phpラインで
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の外部キー制約を削除する方が良いですか?
  • これはどのように構造化しますか?
+0

'contact'モデルにすべてのデータを保存し、' contact_address'をJSON列として設定しないのはなぜですか?そうすれば、追加のモデルは必要ありません。 – enriqg9

+0

私はそれが実際に連絡先を保存しているとは思わない。コードを$ contact = Contact :: create($ request-> except( "contact_address"))に変更してみてください。 – Brett

答えて

1

saveメソッドを使用してください。

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(); 
} 
+0

ありがとうAbhishek - これはうまくいったが、小さな変化があった。 save()メソッドは雄弁なモデルを受け入れ、配列に渡します。上記を次のように調整してください: '$ contact_address = new Contact_address($ request-> contact_address); $ contact =お問い合わせ:: create($ request-> except( "contact_address")); $ contact-> addresses() - > save($ contact_address); ' – Noddy

+1

おっと!私の悪い。更新しました。 – Abhishek

+0

パーフェクト。答える時間をとってくれてありがとう – Noddy

関連する問題