我正在尝试在我应用START& amp;之前获得总记录$qb
。查询$qb
的LIMIT属性。我的$qb
和$totalQb
自行运行得很好,但当我尝试使用$qb
作为子选项时,我会收到错误消息:
$qb = $this->entityManager->createQueryBuilder()
->select('w, se')
->from('Dashboard\Entity\Section', 'se')
->innerJoin('se.word', 'w')
->innerJoin('se.location', 'l');
$qb->add('where', $qb->expr()->andx(
$qb->expr()->eq('l.ignored', $ignored),
$qb->expr()->eq('l.id', $params['l_id'])
), true);
此行以上的所有内容都可以自行运行
$totalQb = $this->entityManager->createQueryBuilder()
->select('COUNT(x.id)')
->from('Dashboard\Entity\Section', 'x');
上面的$ totalQb本身运行良好。但是当我这样做的时候 以下,并尝试使用$ qb作为$ totalQb ...
的子选择$dql = $qb->getDql();
$totalQb->add('where', $totalQb->expr()->exists( $dql ));
$totalSql = $totalQb->getQuery();
$sql = $totalSql->getSql();
$total = $totalSql->getSingleScalarResult();
这是错误
它指的是SubSelect'exists'语句。但是当我自己运行$ dql时 它返回预期的结果
[Syntax Error] line 0, col 69: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got ','
在我的场景中进行子选择的正确方法是什么?
更新
有人建议我添加$totalSql->getDQL();
这是该语句的输出:
SELECT COUNT(x.id) FROM Dashboard\Entity\Section x WHERE
EXISTS(
SELECT w, se
FROM Dashboard\Entity\Section se
INNER JOIN se.word w
INNER JOIN se.location l
AND (l.ignored = 0)
AND (l.id = 2)
GROUP BY w.id, l.id
)
答案 0 :(得分:1)
我能够通过更改内部 - >选择仅从一个表中拉取来修复上述查询。