动态调查app DB结构

时间:2017-02-01 16:46:23

标签: php mysql laravel laravel-5 laravel-5.3

我正在创建一个创建调查的应用。但我在数据库结构中苦苦挣扎。

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

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

我唯一的问题是我需要能够创建某种级联或填充功能。

例如:想象一下,我有一个问题(单选按钮),答案有2个选项,“yes”或“no”,但如果是用户选择“是”,例如它出现另一个问题。

我将如何构建我的表格?

1 个答案:

答案 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_idquestion_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