2014-09-02 5 views
2

У меня есть следующий кодSymfony2 - Query Builder множественным OrderBy

public function queryAssociationsSorted($id){ 
    $qb = $this->createQueryBuilder('a') 
      ->leftJoin('a.category', 'c') 
      ->where('a.job = :id') 
      ->setParameter('id', $id) 
      //->addOrderBy('c.rank', 'DESC') 
      //->addOrderBy('a.updated', 'DESC')  
      ->add('orderBy','c.rank DESC THEN a.updated DESC')  
      ; 

    return $query = $qb->getQuery(); 
} 

и это или закомментированные варианты как только сортировать по a.updated. Я просмотрел другие сообщения по этому вопросу и не могу найти решение. Может ли кто-нибудь предложить, где я ошибаюсь?

ответ

4

Если я не правильно понимания всего, и это результат юй хотите:


идентификатор - звание - обновленный


хх - 4 - 2014-01-01

хх - 3 - 2014-01 -02

хх - 3 - 2014-01-01


Это на самом деле работает:

$qb = $this->createQueryBuilder('a') 
      ->leftJoin('a.category', 'c') 
      ->where('a.job = :id') 
      ->setParameter('id', $id) 
      ->addOrderBy('c.rank', 'DESC') 
      ->addOrderBy('a.updated', 'DESC')  
      ; 

return $query = $qb->getQuery(); 
+0

Я пробовал это в то время, и я не знаю, почему это не сработало, может быть, ошибка в той конкретной версии, которую я использовал.Я использую это часто, и он работает –

+0

См. Другой ответ по той причине, почему это не сработало в исходном контексте. Надеюсь, это поможет кому-то –

1

Я не знаю, как доктрина работает с несколькими сортировать по ..

почему бы вам не попробовать использовать DQL или даже необработанный запрос SQL?

http://docs.doctrine-project.org/en/2.1/reference/dql-doctrine-query-language.html

http://doctrine-orm.readthedocs.org/en/latest/reference/native-sql.html

Edit:

что-то подобное будет работать, я думаю:

->add('orderBy','c.rank DESC, a.updated DESC') 

Если вы до сих пор не имеют успеха необработанный запрос SQL сэкономит вам;)

+0

Я тоже не уверен, но, взгляните, есть «оператор», называемый «addOrederBy», поэтому я полагаю, что наша «нерезкая» не мотивирована :) – DonCallisto

0

За год спустя, и я наткнулся на правильный ответ в this answer от @ red777

Это поможет вам:

$adapter = new DoctrineORMAdapter($queryBuilder, false); Если бы то же самое проблема сегодня утром. По умолчанию Pagerfanta обрабатывает ваш запрос как с соединением. Установка второго аргумента в false делает использование простой обработки запросов .

В Kunstmaan Bundle, в классе AdminListConfiguration, вы должны overide функции, которая создает Pagerfanta, если вы хотите отсортировать простой объект.

Синтаксис в запросе всегда был правильным, но ошибка проникла в DoctrineOrmAdapter. Добавление false, поскольку второй параметр отсортировал проблему

Смежные вопросы