我在存储库中编写了一个自定义查询:
public function findProductDetails($filter = array(), $offset = 0, $limit = 0)
{
$query = $this->getEntityManager()
->createQuery('SELECT prod, comp, cat FROM PaulDemoBundle:Product prod JOIN prod.category cat JOIN prod.company comp WHERE prod.productName LIKE \'%'.$filter['freetext'].'%\' ');
$query->setFirstResult($offset);
$query->setMaxResults($limit);
return $query->getResult();
}
现在我尝试使用Doctrine Query Builder的orderBy()部分向其中添加ORDER BY:
$query->orderBy('prod.productRef', 'ASC');
但是在尝试运行时遇到错误:
Call to undefined method Doctrine\ORM\Query::orderBy()
所以我将以下内容添加到我的存储库顶部,在EntityRepository的USE调用下面:
use Doctrine\ORM\Query;
但是,没有骰子。
我找到的所有文档都只显示使用$ query-> orderBy()方法构建的查询。在Symfony2文档中没有说明如何设置repo以使用Doctrine Query Builder。
我该如何添加orderBy()方法?
我是否正确构建了我的查询? (它基于Symfony2文档,但它们非常糟糕)
答案 0 :(得分:7)
如果您不使用queryBuilder,则无法使用应用于它的方法。您可以自己进行查询,将ORDER BY添加到您的查询中,如下所示:
->createQuery('SELECT prod, comp, cat FROM PaulDemoBundle:Product prod JOIN prod.category cat JOIN prod.company comp WHERE prod.productName LIKE \'%'.$filter['freetext'].'%\' ORDER BY prod.productRef ASC');
或者使用QueryBuilder构建查询:
$qb = $em->createQueryBuilder();
...
有关QueryBuilder的信息,请参阅here,有关createQuery和QueryBuilder的差异,请参阅here。
答案 1 :(得分:1)
如果使用QueryBuilder,则正确的方法是addOrderBy