我需要一个建议我正在使用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以便他能够),但是管理员需要更改此低谷形式的唯一时间是他错误输入。所以我不确定我是否应该这样离开或将数据库结构更改为多对多。
答案 0 :(得分:3)
在您的数据库中存储JSON数据(几乎)绝不是一个好主意。例如,正如您所注意到的,当您想要编辑数据时,它会变得复杂。
我建议使用这样的架构:
然后定义以下关系:
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');
}
的更多信息