Порядок по нескольким столбцам с доктриной


мне нужно упорядочить данные по двум столбцам (когда строки имеют разные значения для столбца № 1, порядок по нему; в противном случае, порядок по столбцу № 2)

Я использую QueryBuilder создать запрос.

если я называю orderBy метод во второй раз, он заменяет любые ранее указанные порядки.

Я могу передать два столбца в качестве первого параметра:

->orderBy('r.firstColumn, r.secondColumn', 'DESC');

но я не могу передать два направления заказа для второго параметра, поэтому, когда я при выполнении этого запроса первый столбец упорядочивается по возрастанию, а второй-по убыванию. Я хотел бы использовать спуск для обоих из них.

есть ли способ сделать это с помощью QueryBuilder? Нужно ли мне использовать DQL?

3 90

3 ответа:

вы должны добавить направление заказа сразу после имени столбца:

$qb->orderBy('column1 ASC, column2 DESC');

как вы уже заметили, несколько звонков в orderByне стек, но вы можете сделать несколько вызовов addOrderBy:

$qb->addOrderBy('column1', 'ASC')
   ->addOrderBy('column2', 'DESC');

В Учении 2.x вы не можете передать несколько порядков, используя доктрину "orderBy" или "addOrderBy", как показано выше. Потому что он автоматически добавляет " ASC "в конце последнего имени столбца, когда вы оставили второй параметр пустым, например, в функции "orderBy".

пример ->orderBy('a.fist_name ASC, a.last_name ASC') выведет SQL что-то вроде этого 'ORDER BY first_name ASC, last_name ASC ASC'. Так что это синтаксическая ошибка SQL. Просто потому, что по умолчанию orderBy или addOrderBy является "ASC".

чтобы добавить несколько порядков, вам нужно использовать функцию "добавить". И так оно и будет.

->add('orderBy','first_name ASC, last_name ASC'). Это даст вам правильно отформатированный SQL.

дополнительная информация о функции add (). http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.QueryBuilder.html#_add

надеюсь, что это помогает. Ура!

можно использовать ->addOrderBy($sort, $order)

добавить: доктрина Querybuilder кстати. часто использует "специальные" модификации обычных методов, см. select-addSelect,where-andWhere-orWhere,groupBy-addgroupBy...