学说2:写一个合适的Subselect

时间:2011-05-18 18:25:50

标签: doctrine-orm

我正在尝试在我应用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
)

1 个答案:

答案 0 :(得分:1)

我能够通过更改内部 - >选择仅从一个表中拉取来修复上述查询。