こんにちは。
表題について質問があります。
以下のソースコードでフォームから飛ばしてきた値をデータベースに格納を試みているのですがうまくいきません。
つまづいているポイントとしては、コントローラーの$customer_jobs = $customer->jobs;でJobテーブルのインスタンスが取得できないところです。
他の1対1のモデル同士の時はうまくモデル(テーブル)インスタンスを取得ができたのですが、
1対多の場合は以下のソースではCollectionインスタンスが返ってきてしまい、fill()などが利用できません。
色々とググってみたのですが、なぜかこのポイントだけ説明しているサイトが見つからず行き詰ってしまいました。
わかる方ご教授いただければと思います。
環境
- laravel5
- 1対多 = Customer : Job
php
1class Customer extends Authenticatable 2{ 3 4 # ...略 5 6 public function jobs() 7 { 8 return $this->hasMany( 'App\Models\Job' ); 9 } 10}
php
1class Job extends Model 2{ 3 4 # ...略 5 6 public function user() 7 { 8 return $this->belongsTo( 'App\Models\Customer' ); 9 } 10} 11
php
1public function create( Request $request ) 2 { 3 4 DB::beginTransaction(); 5 6 try{ 7 8 $user = Auth::user(); 9 10 $customer = Customer::find( $user->id ); 11 $customer_jobs = $customer->jobs; 12 $form = $request->all(); 13 unset( $form["_token"] ); 14 15 # $customer_jobsの中はCollectionインスタンスでfill()が使えない 16 if( $customer_jobs ){ 17 $customer_jobs->fill( $form )->save(); 18 } else { 19 $customer->jobs()->create( $form ); 20 } 21 22 } catch( Exception $e ){ 23 DB::rollBack(); 24 25 return back()->withInput(); 26 } 27 28 DB::commit(); 29 30 return redirect()->route( 'customer.home' ); 31 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/02 08:53