Symfony 2 / Oracle Querybuilder结果区分大小写

时间:2016-02-25 09:28:05

标签: php oracle symfony doctrine-orm query-builder

我对Symfony 2中的查询结果有一种奇怪的行为。 我在Oracle数据库中有这样的数据,按照以下顺序:

  1. BU 4 2015
  2. bU 2
  3. BU C
  4. BU S
  5. BU 4 2014
  6. 通知,第二个数据中的小写

    我只想按字母顺序显示此列表,而不支持任何区分大小写。 想要的结果:

    - BU C
    - bU 2
    - BU 4 2014
    - BU 4 2015
    - BU S
    

    现在,这是使用Symfony 2.5.12制作的Querybuilder:

     $queryBuilder = $this->createQueryBuilder('e');
     $queryBuilder->orderBy('e.name');
    

    但查询,按此顺序显示我的列表:

    - BU C
    - BU 4 2014
    - BU 4 2015
    - BU S
    - bU 2
    
    • 当我在我的Oracle数据库客户端中播放symfony 2探查器中显示的查询时,我得到了想要的结果。

    • 当我转储查询构建器结果时,我得到错误的订单列表。

    我设法通过这个解决我的问题

    $queryBuilder = $this->createQueryBuilder('e');
    $queryBuilder
        ->select(e)
        ->addSelect('UPPER(e.name) as HIDDEN name')
        ->orderBy('name');
    

    所以,我只是想知道为什么我会使用querybuilder获得这种奇怪的行为?

    感谢。

1 个答案:

答案 0 :(得分: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没有奇怪的行为。