如何使用laravel5.1

时间:2017-09-29 01:23:45

标签: loops laravel-5.1

我会直接前进。这个问题与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']

  • 此表保存了所有用户的尝试,因此我可以在 {{1}中引用用户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 choicetrue or false

1 个答案:

答案 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模板重写它应该很容易。