Symfony2 - Пользовательский репозиторий + Doctrine QueryBuilder = Ошибки? - PullRequest
3 голосов
/ 26 августа 2011

Я написал собственный запрос в хранилище:

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 () из Doctrine Query Builder:

$query->orderBy('prod.productRef', 'ASC');

Но я получаю ошибки при попытке запустить это:

Call to undefined method Doctrine\ORM\Query::orderBy()

Поэтому я добавил следующее в начало моего репозитория под вызовом USE для EntityRepository:

use Doctrine\ORM\Query;

Но без кубиков.

Вся документация, которую я нашел, просто показывает, что запрос строится с использованием метода $ query-> orderBy (). В документации Symfony2 нигде не сказано, как настроить репо для работы с Doctrine Query Builder.

Как же я могу добавить метод orderBy ()?

Я даже правильно строю свой запрос? (Он основан на документах Symfony2, но они довольно скудны)

Ответы [ 2 ]

7 голосов
/ 26 августа 2011

Если вы не используете 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.

1 голос
/ 26 августа 2011

Если вы используете QueryBuilder, правильный метод - addOrderBy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...