我正在创建一个创建调查的应用。但我在数据库结构中苦苦挣扎。
My Tables:
Surveys:
- id;
- user_id;
- title;
- status;
Questions:
- id;
- survey_id;
- label;
- input_type;
- options;
- order;
我唯一的问题是我需要能够创建某种级联或填充功能。
例如:想象一下,我有一个问题(单选按钮),答案有2个选项,“yes
”或“no
”,但如果是用户选择“是”,例如它出现另一个问题。
我将如何构建我的表格?
答案 0 :(得分: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_question
数据透视表,其中包含answer_id
和question_id
。
在答案模型中 使用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