У меня странное поведение с результатом запроса в Symfony 2. У меня есть данные, подобные этому в Oracle Database, в этом точном порядке:
уведомление, нижний регистр во вторых данных
Я просто хочу отобразить этот список по алфавиту, без какой-либо чувствительной к регистру поддержки. Желаемый результат:
- BU C
- bU 2
- BU 4 2014
- BU 4 2015
- BU S
Теперь вот Querybuilder, сделанный с Symfony 2.5.12:
$queryBuilder = $this->createQueryBuilder('e');
$queryBuilder->orderBy('e.name');
Но запрос, покажите мой список в следующем порядке:
- BU C
- BU 4 2014
- BU 4 2015
- BU S
- bU 2
Когда я воспроизвожу запрос, отображаемый в профилировщике symfony 2 в моем клиенте базы данных Oracle, я получаю желаемый результат.
Когда я удаляю результат построителя запроса, я получаю неправильный список заказов.
Мне удается решить мою проблему
$queryBuilder = $this->createQueryBuilder('e');
$queryBuilder
->select(e)
->addSelect('UPPER(e.name) as HIDDEN name')
->orderBy('name');
Итак, я просто хочу знать, почему я получаю это странное поведение с помощью querybuilder?
Благодарю.
Прежде всего, ваш "желаемый результат" на самом деле не в алфавитном порядке. Тип без учета регистра приведет к следующему порядку:
bU 2
BU 4 2014
BU 4 2015
BU C
BU S
Во-вторых, способ сортировки без учета регистра с Oracle SQL заключается в использовании UPPER()
или LOWER()
для столбцов, которые вы хотите отсортировать, например:
SELECT *
FROM e
ORDER BY UPPER(e.name);
Наконец, способ сделать нечувствительный к регистру сортировку с Doctrine QueryBuilder - это именно то, как вы это сделали: добавив имя UPPER(e.name) as HIDDEN name
а затем отсортировав это поле.
В этом примере QueryBuilder не вызывает странного поведения.