2017-02-01 5 views
0

アンケートを作成するアプリを作成しています。しかし、私はデータベース構造に苦労しています。動的アンケートアプリDB構造

My Tables: 
Surveys: 
- id; 
- user_id; 
- title; 
- status; 

Questions: 
- id; 
- survey_id; 
- label; 
- input_type; 
- options; 
- order; 

私の唯一の問題は、何らかのカスケードまたはポピュレート機能を作成する必要があるということです。例については

は、例えばユーザが、それは別の質問を表示され、「はい」を選択したことを、私は答えは2つのオプション、「yes」または「no」を持って、質問(ラジオボタン)を持っていることを想像しますが、場合。

テーブルをどのように構成しますか?

答えて

0

連鎖機能を使用するには、質問表内で自己関係を使用できます。あなたの移行でこれを追加します。

$table->integer('questions_id')->unsigned()->nullable(); 
$table->foreign('questions_id')->references('id')->on('questions'); 

あなたのモデルでは、次の操作を行うことができます。

use Illuminate\Database\Eloquent\Model; 

class Question extends Model 
{ 
    public function children() 
    { 
     return $this->belongsTo(Question::class, 'questions_id'); 
    } 
} 

は、その後、あなたが選択した場合は「はい」question idを渡し、あなたは次のように問い合わせることができます。

$questions = Question::with('children')->find($questionId); 
// $questions has related questions 

このアプローチをベースとして使用して改善することができます。

編集あなたのコメントを1として、あなたはanswer_idquestion_idanswer_questionピボットテーブルが必要になります。

回答モデル Illuminate \ Database \ Eloquent \ Modelを使用します。

class Answer extends Model 
{ 
    public function questions() 
    { 
     return $this->belongsToMany(Question::class, 'answer_question'); 
    } 
} 

そして、あなたは

$answerWithQuestions = Answers::with('questions')->find($answerId); 
// $answerWithQuestions has related Questions 
+0

こんにちはGayanを照会、あなたのフィードバックに感謝、しかし、私は、ユーザーの回答に基づいて新しい質問を関連付けるだろうか?例えば、私は4つの入力チェックボックスのタイプを利用することができ、ユーザは2番目のチェックボックスの答えを選択します。その答えに基づいて別の質問が出されます。私はこのタイプの関係を作るのにもう一つのテーブルが必要だと思います。 – Pedro

+0

答えを更新しました。見てみましょう – Gayan