Мне нужно упорядочить данные по двум столбцам (когда строки имеют разные значения для столбца номер 1, упорядочить по нему; в противном случае упорядочить по столбцу номер 2)
Я использую QueryBuilder
для создания запроса.
Если я вызываю orderBy
метод во второй раз, он заменяет все ранее указанные порядки.
Я могу передать два столбца в качестве первого параметра:
->orderBy('r.firstColumn, r.secondColumn', 'DESC');
Но я не могу передать два направления упорядочения для второго параметра, поэтому, когда я выполняю этот запрос, первый столбец упорядочивается по возрастанию, а второй по убыванию. Я хотел бы использовать для них обоих по убыванию.
Есть ли способ сделать это с помощью QueryBuilder
? Мне нужно использовать DQL?
источник
alias.column_name
.В Doctrine 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 (). https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html#low-level-api
Надеюсь это поможет. Ура!
источник
ты можешь использовать
->addOrderBy($sort, $order)
Добавить: Doctrine Querybuilder btw. часто использует «специальные» модификации обычных методов, см
select-addSelect
,where-andWhere-orWhere
,groupBy-addgroupBy
...источник
Комментарий для
orderBy
исходного кода примечаний:Keys are field and values are the order, being either ASC or DESC.
. Так что вы можете это сделатьorderBy->(['field' => Criteria::ASC])
.источник
Для
orderBy
метода требуются две строки илиExpr\OrderBy
объект. Если вы хотите добавить несколько объявлений порядка, правильнее всего использоватьaddOrderBy
метод или создать экземплярOrderBy
объекта и соответствующим образом заполнить его:источник