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

Mr *_*blo 3 php symfony

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

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();
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试使用Doctrine Query Builder的orderBy()部分向其中添加ORDER BY:

$query->orderBy('prod.productRef', 'ASC');
Run Code Online (Sandbox Code Playgroud)

但是在尝试运行时遇到错误:

Call to undefined method Doctrine\ORM\Query::orderBy()
Run Code Online (Sandbox Code Playgroud)

所以我将以下内容添加到我的存储库顶部,在USE调用EntityRepository下面:

use Doctrine\ORM\Query;
Run Code Online (Sandbox Code Playgroud)

但是,没有骰子.

我找到的所有文档都只显示使用$ query-> orderBy()方法构建的查询.在Symfony2文档中没有说明如何设置repo以使用Doctrine Query Builder.

我究竟如何添加orderBy()方法?

我甚至正确构建我的查询?(它基于Symfony2文档,但它们非常糟糕tbh)

Sgo*_*kes 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');
Run Code Online (Sandbox Code Playgroud)

或者使用QueryBuilder构建查询:

$qb = $em->createQueryBuilder();
...
Run Code Online (Sandbox Code Playgroud)

这里的QueryBuilder的和这里上的createQuery和QueryBuilder的差异.