Порядок по нескольким столбцам с доктриной
мне нужно упорядочить данные по двум столбцам (когда строки имеют разные значения для столбца № 1, порядок по нему; в противном случае, порядок по столбцу № 2)
Я использую QueryBuilder
создать запрос.
если я называю orderBy
метод во второй раз, он заменяет любые ранее указанные порядки.
Я могу передать два столбца в качестве первого параметра:
->orderBy('r.firstColumn, r.secondColumn', 'DESC');
но я не могу передать два направления заказа для второго параметра, поэтому, когда я при выполнении этого запроса первый столбец упорядочивается по возрастанию, а второй-по убыванию. Я хотел бы использовать спуск для обоих из них.
есть ли способ сделать это с помощью QueryBuilder
? Нужно ли мне использовать DQL?
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
надеюсь, что это помогает. Ура!