2017-08-24 10 views
0

私はpolls、poll_questions、poll_choicesの3つのテーブルを持っています。彼らの関係は世論調査であり、多くのpoll_questionsとpoll_questionsには多くのpoll_choicesがあります。挿入しようとしていますが、poll_choices()のBadMethodCallExceptionエラーが発生します。BadMethodCallException Laravel

ポールモデル:

public function poll_questions() { 
    return $this->hasMany(PollQuestion::class); 
} 

投票質問モデル:

public function polls() { 
    return $this->belongsTo(Poll::class, 'poll_id'); 
} 

public function poll_choices() { 
    return $this->hasMany(PollChoice::class); 
} 

投票の選択肢モデル:

public function poll_questions() { 
    return $this->belongsTo(PollQuestion::class, 'poll_question_id'); 
} 

ここでは私のコントローラである:

public function store(Request $request) { 
    $rules = [ 
     'title'  => 'required', 
     'questions' => 'required|poll_questions', 
    ]; 

    $this->validate($request, $rules); 


    $newPoll = Poll::create(request()->all()); 
    $questions = $request->input('questions'); 
    for ($i = 0; $i < count($questions); $i++) { 
     $poll_question = new PollQuestion(); 
     $poll_question->input_type = $questions[$i]["input_type"]; 
     $poll_question->question = $questions[$i]["question"]; 

     $newPoll->poll_questions()->save($poll_question); 

     if ($questions[$i]["input_type"] === '0') { 
      for ($j = 0; $j < count($questions[$i]["choices"]); $j++) { 
       $poll_choices = new PollChoice(); 
       $poll_choices->choice = $questions[$i]["choices"][$j]; 
       $newPoll->poll_questions()->poll_choices()->save($poll_choices); 
      } 
     } 
    } 

    return $this->showOne($newPoll); 
} 

私は、この行でエラーが出ます:$newPoll->poll_questions()->poll_choices()->save($poll_choices);

はまた、私が試した:$newPoll->poll_questions->poll_choices()->save($poll_choices);

私は世論調査とpoll_question完璧を追加することができます。しかし、投票選択を追加しようとすると、エラーが発生します。 poll_questionsのpoll_choicesメソッドにアクセスできません。

この問題を解決するにはどうすればよいですか?

Laravel 5.4

フル・エラー・ログ:あなたが持っている未定義のメソッドへ

BadMethodCallExceptionコール を照らし\データベース\クエリー\ビルダー:: poll_choices()

答えて

1

あなたがこれを行うときに既に投票質問を保存し、それを投票に関連付けました:

$newPoll->poll_questions()->save($poll_question); 

残っていることは、質問に選択肢を保存することだけです。もう親の投票を行う必要はありません。だからあなたの質問のループでは、あなたの持っているものの代わりにこれを使用してください:

$poll_question->poll_choices()->save($poll_choices); 
+0

クール、ありがとう。 – Nevermore

関連する問題