2017-12-14 3 views
1

親に関連付けられた子モデルを作成しようとすると問題が発生します。Laravel HasManyは子レコードを作成します

私は2つのモデルがあります:私は機関をクリックして、私はshow.blade.phpに行くとき

  • Instituion(多くのアドレスを持っている)
  • 住所(1機関を持っている)

を私はその機関の住所を作成するフォームを持っていますが、私はその要求から親と子供を関連付けるフィールド "instituion_id"を得ることができません。

これは、要求に示されている:アクション= "/施設/ {{$ institution-> ID:私は次のルートを呼んでいるフォームから

リクエストデータ

enter image description here

}} /アドレス」

これはAddressControllerのコードである:

public function store(Request $request) 
{ 
    // dd($request->all()); 
    Address::create($request->all()); 
    return back(); 
} 

私はそれをテスト、DBはisntitution_id列を求めている:

SQLSTATE[HY000]: General error: 1364 Field 'institution_id' doesn't have a default value (SQL: insert into addresses (address_name , address_number , address_full_name , address_city , address_state , address_postal_code , address_country , updated_at , created_at) values (a, a, a, a, a, a, a, 2017-12-14 14:06:47, 2017-12-14 14:06:47))

だから、私は、フォームからフィールド「institution_id」を渡すとどのように私は、コントローラにそれを得るとするassocuiatedんどのように子供の記録?

私は多くの投稿を読みましたが、それらのすべてでは、1つのフィールドを持つ子レコードを作成していますが、すべてのAddresフィールドで補完リクエストを処理したいと思います。

よろしく

+0

その機関のためのものになる。あなたがこのコードに到達する前にアドレスを作成できる人のためのアクセスコントロールがあることを願っています – rypskar

+0

show.blade.phpビューに$ institutionオブジェクトがあることを確認してください。 – robbyrr

+0

ありがとう@rypskar私はそれを試みましたが、nullでフィールドを返しています –

答えて

2

このようなstoreメソッドのパラメータからIDをアクセスすることができる:コントローラで

Route::post('/institution/{institution_id}/addresses', '[email protected]') 

public function store($institution_id, Request $request) 
{ 
    $request->request->add(['institution_id' => $institution_id]); 
    // dd($request->all()); 
    Address::create($request->all()); 
    return back(); 
} 
ルートファイルで

Ps:tにinstitution_idを追加することを忘れないでくださいアドレスモデルのフィールドを入力することができます。

+0

@それを行う正しい方法ですか?よろしくです –

+0

隠しフィールドを追加すると、情報を複製するだけなので、それは推奨されています。 – Maraboc

+0

Thanks @Maraboc !!返信いただきありがとうございます。 –

0

すべての関係が設定されている場合、ドキュメントはあなたが https://laravel.com/docs/5.5/eloquent-relationships#the-create-method 例探しているものがあります:あなたは'institution_id'とあなたのHTMLのフォームで隠しフィールドを持っているし、値を設定することができ

// Routes (If laravel version > 5.2 web.php I guess 
Route::post('/institution/{institution_id}/addresses', '[email protected]') 

// app/Http/Controllers/Controller.php 
public function store(Request $request) 
{ 
    $institution = Institution::find($request->institution_id); 
    $address = $institution->addresses()->create($request->all()); 
    return back(); 
} 
// app/Institution.php 
class Institution extends Model 
{ 
    public function addresses() 
    { 
     return $this->hasMany('App\Address', 'institution_id', 'id'); 
    } 
} 
+0

私はそのドキュメントを読んだが、いつも私に次のエラーを与える:ヌルのメンバ関数のアドレス()への呼び出し –

+0

あなたのモデルに関係が設定されている場合は、https://laravel.com/docs/5.5/eloquent-relationships# 1対多 –

+0

はいそれは両方の関係を持っています –

関連する問題