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)
. Пожалуйста, мне нужно знать, что я делаю неправильно, и как это можно сделать. Спасибо.