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
)