doctrine querybuilder $ qb - > EXPR() - >所有

时间:2015-07-14 07:54:50

标签: symfony doctrine-orm

我正在使用Symfony2。我必须列出Entity OpeEntetes的最后$ nbOpe实体。以下脚本给出了错误:

  

块引用

[学说\ ORM \查询\ QueryException]   [语义错误]第0行,第16行附近' ALL(选择来自':错误:类'所有'未定义。

  

块引用

怎么办?

public function essai1($nbOpe){
        $in = $this->_em->createQueryBuilder()
            ->from('GcRequetesBundle:OpeEntetes','ein')
            ->orderBy('ein.oeNumOpe', 'DESC')
            ->setMaxResults($nbOpe);

$qb = $this->_em->createQueryBuilder();
            $qb
                -> add("select",new Expr\Select(array('res')))
                -> add('from', new Expr\From($qb -> expr()-> all($in -> getDql()), 'res'));
            $query = $qb -> getQuery();
            $result= $query -> getArrayResult();
            return $result;
        }

1 个答案:

答案 0 :(得分:1)

您的代码中有几处错误:

在任何情况下,子查询不支持setMaxLimits的限制可能意味着您无法以这种方式构建代码。如果你没有为你显示塞子,那么你可以尝试使用以下代码(最简单的方法就是只有一个查询,但我认为你有两个步骤可以做到这一点...... ):

    $in = $em->createQueryBuilder()
        ->select('ein')
        ->from('GcRequetesBundle:OpeEntetes','ein')
        ->orderBy('ein.oeNumOpe', 'DESC')
        ->setMaxResults($nbOpe); // this does not affect the result at all

    $qb = $em->createQueryBuilder();
    $qb->add('select', 'ein2');
    $qb->add('from', 'GcRequetesBundle:OpeEntetes ein2');
    $qb->add('where', $qb->expr()->eq('ein2.id', $qb->expr()->any($in->getDql())));
    $query = $qb -> getQuery();
    $result= $query -> getArrayResult();
    return $result;