2016-06-15 7 views
0

私は2つのモデルの間に関係を設定しました。二つのモデルが同じように設定されています。コントローラに新しく作成されたモデルのLaravel挿入関係

public function character() { 
    return $this->belongsTo('App\Character'); 
} 

そして/

アプリCharacter.php

public function characteristics() { 
    return $this->hasMany('App\Characteristics'); 
} 

アプリ/ Characteristics.phpを私が作成するためのメソッドを持っています所定の一連の特性を有する新しいキャラクターを以下のように表示する:

アプリ/ HTTP /コントローラ/ CharacterController.php

public function newCharacter(Request $request) { 
    $character = new Character(); 
    $characteristics = getCharacteristics($character->id); 
    // Save basic character stuff 
    $character->characteristics()->saveMany($characteristics); 
    $character->save(); 
} 

saveManyBuilderの関数ではないので、強調表示された行がエラーを投げているので、私は持っているでしょうfindを行うことなく、作成された文字を取得する方法もう一度データベースにヒットする?

+0

あなたは 'associate'をお探しですか? – tkausl

+0

'getCharacteristics()'は何を返しますか?特性モデルの配列ですか? – slapyo

+0

すみません、私はすぐに夕食に行きました。 'getCharacteristics'はモデルの配列を返します。 – CaldwellYSR

答えて

1

hasMany/belongsTo関係を構築する場合、特性表にcharacter_idの列が必要であるため、最初に文字モデルを保存する必要があると思います。$character->characteristics()->saveMany($characteristics); LaravelはIDの挿入を試みます。親モデル。あなたが共有しているコードに従って、モデルをインスタンス化したばかりです。この時点では、モデルに関連付けられているIDはありません。だから、最初の文字のモデルを保存する必要があるとgetCharacteristics()方法は、特性モデルの配列/コレクションを返して、後は動作するはずと仮定:

public function newCharacter(Request $request) { 
    $character = new Character(); 
    $character->save(); 
    $characteristics = getCharacteristics(); 
    // Save basic character stuff 
    $character->characteristics()->saveMany($characteristics); 
} 
をし、さらにあなたの文字で特性の方法から、あなたのためにこれを明確にしますモデル Builderが返されていないので、saveManyはここで動作します。

+0

私はこれらの変更を行いました(今質問を更新しています)、それでも同じエラーがあります。 – CaldwellYSR

+1

あなたは 'characterstics()'を呼び出そうとしていますが、モデルに定義されているメソッド名は 'characteristics()'です。エラーが発生したのは 'missing i'です。 –

+0

うわー..そこに私の2番目の目のペアになってくれてありがとう。私はあなたの答えを受け入れるつもりですが、私はコードの並べ替えがまだ必要であったと考えています。 – CaldwellYSR

関連する問題