Doctrine orm 原则2:编写适当的子选集

Doctrine orm 原则2:编写适当的子选集,doctrine-orm,Doctrine Orm,我正在尝试获取将开始和限制属性应用于查询之前,$qb将返回的总记录。我的$qb和$totalQb本身运行良好,但当我尝试将$qb用作子选择时,会抛出一个错误: $qb = $this->entityManager->createQueryBuilder() ->select('w, se') ->from('Dashboard\Entity\Section', 'se') ->innerJoin('se.word',

我正在尝试获取将开始和限制属性应用于查询之前,
$qb
将返回的总记录。我的
$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本身运行良好。但是当我做这个 然后尝试使用$qb作为$totalQb的子选项

这是抛出的错误

它引用了SubSelect“exists”语句。但是当我自己运行$dql时 它返回预期的结果

在我的场景中,进行子选择的正确方式是什么

更新 有人建议我添加
$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
)

我可以通过将“内部->选择”更改为“仅从一个表中提取”来修复上述查询。

尝试转储$totalSql->getDQL()以查看查询的错误。我将输出添加到问题的末尾。在我看来,这很好,但显然我需要第二双眼睛
$total=$totalSql->getSingleScalarResult()…我得到:
[Syntax Error]第0行,第69列:错误:预期的条令\ORM\Query\Lexer::T_FROM,get',
,但现在我再次查看它,似乎子选择不能选择多个对象。可能需要调整我的查询。子选择返回348条记录,但使用子选择的计数显示5468条记录。。。
$dql = $qb->getDql();
$totalQb->add('where', $totalQb->expr()->exists( $dql ));
$totalSql = $totalQb->getQuery();

$sql = $totalSql->getSql();
$total = $totalSql->getSingleScalarResult();
[Syntax Error] line 0, col 69: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got ','
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
)