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

Php Laravel数据库多对多(Mysql)或将Json保留在表中,php,jquery,mysql,json,laravel,Php,Jquery,Mysql,Json,Laravel,我需要一个建议,我正在使用laravel,我不确定我应该使用多对多(mysql)还是使用表中编码的Json(其余代码工作正常),希望我能够正确解释它。因此,用户必须解决一个有问题的考试,并且问题在点击按钮时发生变化(每个问题都在同一个div上,内容在点击jquery时发生变化),因此当用户按下start时,它会显示带有3个(例如)单选框的问题作为正确答案。在用户选择“答案表单”单选按钮并单击“下一步”后,他的答案(值)存储在会话中,然后同一个div显示不同的问题,依此类推。一旦用户进入最后一个问

我需要一个建议,我正在使用laravel,我不确定我应该使用多对多(mysql)还是使用表中编码的Json(其余代码工作正常),希望我能够正确解释它。因此,用户必须解决一个有问题的考试,并且问题在点击按钮时发生变化(每个问题都在同一个div上,内容在点击jquery时发生变化),因此当用户按下start时,它会显示带有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”看起来像(这是一个示例)

这就是我现在所拥有的,所以控制器读取这个json文本并从中删除正确的内容,然后将json发送到带有问答的jquery,然后通过单选按钮和next按钮生成表单


但是有了这个“管理员”就不能在问题出现后进行编辑(必须将id放在json中,这样他才能编辑),但是管理员唯一需要更改这个表格的时间是当他输入错误时。所以我不确定我是应该这样做,还是将db结构更改为多对多

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

我建议采用如下模式:

考试
  • 头衔
  • 持续时间
  • 还记得你的代币吗
问题
  • 正文
  • 考试id
答案
  • 正文
  • 问题编号
  • 正确(布尔值)
然后定义以下关系:

考试模式 问题模型 应答模型
更多关于

的信息,目前看来,所有强硬的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"
}

]
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');
}