Как сохранить переменную на основе другой переменной? - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь пометить экзамен «is_complete», если «результат» достигнет 2. Я хотел бы сделать это, когда форма отправляется пользователем после завершения теста и расчета результатов. Обе переменные находятся в одной таблице. Это возможно через 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 Ответ

4 голосов
/ 09 мая 2019

Используйте следующий код, чтобы отметить экзамен как завершенный:

$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();
}

Дайте мне знать, если я неправильно понял требование.

Еще одно оптимизированное решение

$exam_result = ExamResult::create([
    'exam_id' => $course->exam->id,
    'employee_id' => \Auth::id(),
    'result' => $exam_score,
    'is_complete' => $exam_score > 2
]);
$exam_result->answers()->createMany($answers);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...