2017-02-01 41 views
0

我正在創建一個應用程序創建調查。但我在數據庫結構中掙扎。動態調查應用程序數據庫結構

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 

您可以使用此方法作爲基礎,並對其進行改進。

編輯

根據你的評論,你會需要answer_idquestion_id一個answer_question透視表。

Answer模式 使用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

加揚您好,感謝您的反饋,但我怎麼會涉及基於用戶的答案的新問題?例如,我有4個可用的輸入複選框類型,並且用戶選擇例如第二個複選框的答案,根據該答案給出另一個問題,我會構造這種情況嗎?我想我需要一張桌子來創造我認爲的這種關係。 – Pedro

+0

我更新了我的答案。看一看 – Gayan

相關問題