我对Symfony 2中的查询结果有一种奇怪的行为。 我在Oracle数据库中有这样的数据,按照以下顺序:
通知,第二个数据中的小写
我只想按字母顺序显示此列表,而不支持任何区分大小写。 想要的结果:
- 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获得这种奇怪的行为?
感谢。
答案 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没有奇怪的行为。