Результат Symfony 2 / Oracle Querybuilder чувствителен к регистру

1

У меня странное поведение с результатом запроса в Symfony 2. У меня есть данные, подобные этому в Oracle Database, в этом точном порядке:

  1. BU 4 2015
  2. bU 2
  3. BU C
  4. BU S
  5. BU 4 2014

уведомление, нижний регистр во вторых данных

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

- 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?

Благодарю.

  • 0
    Не знаю много об Oracle, но это может быть проблемой с сопоставлением.
Теги:
doctrine2
query-builder

1 ответ

0

Прежде всего, ваш "желаемый результат" на самом деле не в алфавитном порядке. Тип без учета регистра приведет к следующему порядку:

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 не вызывает странного поведения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню