如何基于其他变量保存变量?

时间:2019-05-09 10:06:48

标签: php laravel

如果“结果”达到2,我试图将考试标记为“ is_complete”。当用户在完成测试并计算结果后提交表格时,我想这样做。两个变量都在同一表中。是否可以通过PHP或我需要使用Java脚本。

这是我尝试制定代码的方式。

在模型上

public function answers()
{
  return $this->hasMany('App\ExamResultsAnswers');
}

public function passed()
{

    $instance = new ExamResult;
    $instance->result < 2;

    $var = ExamResult::where('result', '>=', 2)->get();
    $var_is_greater_than_two = ($var >= 2 ? true : false);

    $condition = new ExamResult;
    $condition->is_complete ='1';

    if ($this->compare($instance, $condition)) {
        return $instance->$column == 1;
    }
}

在控制器上

public function exam($course_id, Request $request)
{
    $course = Course::where('id', $course_id)->firstOrFail();
    $answers = [];
    $exam_score = 0;
    foreach ($request->get('question') as $question_id => $answer_id) {
        $question = ExamQuestion::find($question_id);
        $correct_answer = ExamOption::where('exam_question_id', $question_id)
            ->where('id', $answer_id)
            ->where('is_correct', 1)->count() > 0;
        $answers[] = [

            'exam_question_id' => $question_id,
            'exam_option_id' => $answer_id,
            'corect' => $correct_answer
        ];
        if ($correct_answer) {
            $exam_score += $question->score;
        }
    }

    $exam_result = ExamResult::create([
        'exam_id' => $course->exam->id,
        'employee_id' => \Auth::id(),
        'result' => $exam_score,

    ]);


    $exam_result->answers()->createMany($answers);
    $exam_result->passed();
    return redirect()->route('learn.show', [$course, $request])->with('message', 'Test score: ' . $exam_score);
}

控制器应该执行以下操作

  1. 找到所有与该课程相关的课程和考试-如此
  2. 然后找到所有问题以及这些问题的选项-可行
  3. 然后,如果用户选择正确的答案 然后计算所有正确答案-可行
  4. 然后我要保存 结果,如果答案在2以上,则将其标记为完成 答案。 -在此代码中保存了exam_id,employee_id和结果, 但是,如果结果等于2,则无法完成。即 为什么我要在模型上执行此操作。

1 个答案:

答案 0 :(得分:4)

使用以下代码将考试标记为已完成:

$qbProjects->andWhere($qbProjects->expr()->in('p.categories', [1,2,3]));

让我知道我是否误解了要求。

另一个优化的解决方案

$exam_result = ExamResult::create([
    'exam_id' => $course->exam->id,
    'employee_id' => \Auth::id(),
    'result' => $exam_score,
]);
$exam_result->answers()->createMany($answers);

if($exam_result->result > 2) {
    $exam_result->is_complete = 1;
    $exam_result->save();
}