Symfony2 -自定义存储库+ Doctrine QueryBuilder =错误


Symfony2 - Custom Repository + Doctrine QueryBuilder = Errors?

我已经在存储库中编写了一个自定义查询:

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();
}

现在我正试图添加一个ORDER BY到它,使用命令查询生成器的orderBy()部分:

$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文档,但他们相当差)

如果不使用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和这里的createQuery和QueryBuilder的区别

如果使用QueryBuilder,正确的方法是addOrderBy