Laravel数据库多对多(Mysql)或将Json保留在表中


Laravel Database Many to Many (Mysql) or keep Json in table

我需要建议我正在使用 laravel,我不确定我是否应该多对多 (mysql( 还是继续使用在表中编码的 Json(其余代码工作正常(,希望我能够正确解释它。所以在这里,用户必须解决一个有问题的考试,并且问题在单击按钮时会发生变化(每个问题都在同一个div 上,内容在点击时使用 jquery 更改(,因此当用户按下开始时,它会显示带有 3 个(例如(单选框的问题作为答案,其中一个是正确的。用户选择答案表单单选按钮并单击下一步后,他的答案(值(将存储在会话中,然后相同的div 显示不同的问题,依此类推。一旦用户到达最后一个问题,他的答案就会从会话中获取并发送到电子邮件中。所以现在是代码部分,考试表的结构。

   Schema::create('exams', function(Blueprint $table)
        {
        $table->increments('id');
                    $table->string('title')->unique();
                    $table->text('questions_json'); //json encode see example below
                    $table->integer('duration');
                    $table->string('remember_token',64);
                    $table->timestamps();
        });

"questions_json"看起来像(这是示例(

[
   {
    "Question": "1+1?",
    "1": "11",
    "2": "2",
    "3": "-2",
    "correct": "2"
},
{
    "Question": "What is a rabbit?",
    "1": "Mammal",
    "2": "Vicious beast with sharp teeth",
    "3": "Cute thing",
    "correct": "1"
}
]

这就是我现在拥有的,因此控制器读取此 JSON 文本并从中删除正确内容,然后将带有问题和答案的 JSON 发送到 jQuery,然后生成带有单选按钮和下一步按钮的表单。

但是有了这个"管理员"就无法在问题进入后进行编辑(必须将 id 放入 json 中以便他能够(,但管理员唯一需要更改此低谷形式的时间是他打错字时。所以我不确定我是否应该保持这种方式或将数据库结构更改为多对多。

在数据库中存储JSON数据(几乎(从来都不是一个好主意。例如,正如您所注意到的,当您要编辑数据时,它会变得复杂。

我建议这样的架构:

考试

  • 标题
  • 期间
  • remember_token

问题

  • 发短信
  • exam_id

答案

  • 发短信
  • question_id
  • 正确(布尔值(

然后定义以下关系

考试模式

public function questions(){
    return $this->hasMany('Question');
}

问题模型

public function answers(){
    return $this->hasMany('Answer');
}
public function exam(){
    return $this->belongsTo('Exam');
}

应答模型

public function question(){
    return $this->belongsTo('Question');
}

有关 Laravel 文档中的关系的更多信息