我会直接前进。这个问题与my passed question有关,如果你解决了这个问题,我会在3天内给你赏金。
我想要什么
用户回答测验后,用户可以保存而无需提交,因此可以稍后编辑/继续。现在,在他们保存之后,如何在测验的当前循环问题中循环用户的答案?这样用户就可以编辑或继续测验。
我有什么
数据库:
quiz_result_of_user
有9
个字段,['id', 'quiz_id', 'user_id', 'question_id', 'answer', 'question_type', 'attempt_number', 'marks', 'grades']
quizattempt_user
有3
个字段,['id', 'quiz_id', 'user_id']
where
id
=
attempt_number
的所有答案表。控制器 - 更新
quiz_result_of_user
问题
我现在可以遍历问题和用户的答案,但我无法弄清楚如何将用户的答案放在一边,因为它也是一组数据。 注意:每个测验可以有不同类型的问题,$quiz = Quiz::with('multiple_choices.answers', 'true_false', 'short_answer', 'descriptions')->findOrFail($id);
$questions = collect($quiz->multiple_choices);
$questions = $questions->merge(collect($quiz->true_false));
$questions = $questions->merge(collect($quiz->short_answer));
$questions = $questions->merge(collect($quiz->descriptions));
$questions = $questions->sortBy('question_number');
,multiple choice
和true or false
。
答案 0 :(得分:1)
根据我对表结构的理解,我们可以创建一个由问题ID键入的用户答案字典,这样我们就可以轻松查找每个问题的答案。这是我们可以扩展的最小实现:
$questions = ... // see question description
$answers = QuizResults::where('quiz_id', $quiz->id)
->where('user_id', $userId)
->where('attempt_number', $attemptNumber)
->get()
->keyBy('question_id');
foreach ($questions as $question)
{
echo $question->question_number + ". " + $question->description;
if ($question is MultipleChoice) {
foreach ($question->answers as $choice) { echo $choice; ... }
}
echo 'Your answer: ' + $answers->get($question->id)->first()->answer;
}
我不确定该网页是否使用Blade生成结果。为清楚起见,这是用简单的PHP编写的,但是为Blade模板重写它应该很容易。