php - 在教义 addSelect() 函数中如何正确使用 sql JOIN 和 ON 语句
问题描述
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)
。请我需要知道做错了什么以及使其正常工作的可能方法。谢谢你。
解决方案
推荐阅读
- python - 想要为每个盆栽簇着色不同的颜色
- python - 以动态方式安装特定版本的python依赖项
- python-3.x - 字符串匹配 KMP
- amazon-web-services - 达到内存限制时,API Gateway 中的缓存行为如何?
- html - 为什么在使用媒体查询时隐藏部分 HTML 不起作用
- python - Python:保留控制台中的最后一行以获取特定输出
- c# - c# 使用构造或 obj 参数创建类的泛型方法
- excel - 通过 MATLAB 将 Excel OLE 对象保存到磁盘
- facebook - 是否有任何只能处理特定用户的免费 OAuth2 提供程序?
- javascript - Svelte 3:单元测试时无法导入模块