Laravel - красноречивый запрос для отображения результата теста - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь написать запрос в моем контроллере, чтобы отобразить результат теста для студентов.У меня есть эти таблицы

CREATE TABLE IF NOT EXISTS `quizz_question` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `topic` varchar(1000) COLLATE utf8_unicode_ci NOT NULL,
  `question_code` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `answer1` varchar(100) COLLATE utf8_unicode_ci NULL,
  `answer2` varchar(100) COLLATE utf8_unicode_ci NULL,
  `answer3` varchar(100) COLLATE utf8_unicode_ci NULL,
  `answer4` varchar(100) COLLATE utf8_unicode_ci NULL,
  `topic` varchar(1000) COLLATE utf8_unicode_ci NOT NULL,
  `correct_answer` varchar(100) COLLATE utf8_unicode_ci NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;


CREATE TABLE IF NOT EXISTS `quizz_attempt` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `student_code` varchar(1000) COLLATE utf8_unicode_ci NOT NULL,
  `answer` varchar(100) COLLATE utf8_unicode_ci NULL,
  `question_code` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;

Две таблицы стали этими двумя классами моделей: QuizzQuestion и QuizAttempt.

В quizz_attempt, если студент выберет ответ (ответ), потребуетсяответьте на вопросный код в quizz_attempt и сравните с quizz_question.

  1. quizz_attempt.answer = 1, тогда он выберет содержание в answer1 в качестве правильного ответа

  2. quizz_attempt.answer = 2, тогда он выберет содержание в answer2 в качестве правильного ответа

  3. quizz_attempt.answer = 3, затем выберет содержимое в answer3 в качестве правильного ответа

  4. quizz_attempt.answer = 4, тогда он выберет содержание в answer4 в качестве правильного ответа

    public function gameQualifiers(Request $request)
    {       
    $revenuedetails = DB::table('quizz_attempt as g')
    ->select(
       'g.student_code', 
       'g.answer'             
    )
    ->orderByRaw('g.created_at DESC'); 
    }
    

Я знаю, что мне нужно объединить две таблицы для результата.Я запустил код в моем контроллере, но не знаю, как его завершить.Я хочу написать запрос для отображения списка студентов, которые выбирают правильные ответы

1 Ответ

0 голосов
/ 01 июля 2019

Попытка теста должна иметь quizz_question_id в качестве внешнего ключа. Это облегчит подключение этих двух устройств.

Вы можете настроить две модели в соответствии с таблицами базы данных: QuizzQuestion и QuizzAttempt. Вы можете настроить Foreign Keys следующим образом:

QuizzAttempt.php

public function quizzQuestion()
{
     return $this->belongsTo('App\QuizzQuestion');
}

И QuizzQuestion.php

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

Итак, теперь вы хотите получить все попытки, где ответ правильный - вы смотрите на экземпляр QuizzQuestion, например,

$question = QuizzQuestion::find(1); // first question

$correctResults = QuizzAttempts::where('quizz_question_id', $question->id)
    ->where('answer', $question->correct_answer)
    ->pluck('student_code');`

Теперь у вас есть все студенческие коды учеников, которые получили правильные ответы.

*** Обновление

Если вы не можете изменить структуру таблиц, вы можете выполнить следующий запрос:

// 1) find the question you want the answers for
$question = QuizzQuestion::find(1);

// 2) retrieve the correct results
$correctResults = QuizzAttempts::where('question_code', $question->question_code)
    ->where('answer', $question->correct_answer)
    ->pluck('student_code');`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...