我正在使用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;
}
答案 0 :(得分:1)
您的代码中有几处错误:
子查询不支持setMaxResults Enabling LIMIT resp. setMaxResults on subquery
不支持子查询Subquery into FROM
您可能误解了ALL表达式的含义以及For example MySql documentation about ALL
在任何情况下,子查询不支持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;