Как правильно я могу использовать операторы sql JOIN и ON внутри функции addSelect () доктрины - PullRequest
0 голосов
/ 26 октября 2019
 public function calculateCandidatesExamScores($examIRI, $groupIRI, int $page =1)
    {
        $firstResult = ($page -1 ) * self::ITEMS_PER_PAGE;

        $dql = $this->createQueryBuilder('examlog');
        $dql->join('examlog.examQuestion', 'question');
        $dql->join('question.tblQuestionOptions', 'option');
        $dql->join('examlog.examUser', 'examRegister');
        $dql->join('examRegister.userGroup', 'group');
        $dql->join('examRegister.user', 'candidate');
        $dql->select('count(examlog.id) totalQuestions, candidate.firstname firstname, candidate.regNumber applicant_ref');
//        $dql->addSelect('(SELECT SUM(q.marks) FROM App\Core\Domain\Entity\TblExamUserLogs logs JOIN App\Core\Domain\Entity\TblQuestions q ON logs.examQuestion = q.id JOIN App\Core\Domain\Entity\TblQuestionOptions op ON q.tblQuestionOptions = op.id WHERE logs.answerText = op.answer) AS score');
        $dql->andWhere('examRegister.exam = :exam AND examRegister.userGroup = :group');
        $dql->setParameter('exam', $examIRI);
        $dql->setParameter('group', $groupIRI);
        $dql->addGroupBy('candidate.firstname, candidate.regNumber');
//        $dql->addOrderBy('score', 'DESC');
        $query = $dql->getQuery()
            ->setFirstResult($firstResult)
            ->setMaxResults(self::ITEMS_PER_PAGE);

        $doctrinePaginator = new DoctrinePaginator($query, $fetchJoinCollection = true);


        return ['totalResults'=> $doctrinePaginator->count(), 'results'=>$doctrinePaginator->getQuery()->getResult()];

    }

Приведенный выше запрос работает, но если я удалю комментарий к функции $dql->addSelect(..., он выдаст следующую ошибку Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got 'ON' (500 Internal Server Error). Пожалуйста, мне нужно знать, что я делаю неправильно, и как это можно сделать. Спасибо.

...