groupBy在Doctrine QueryBuilder中使用别名

时间:2012-07-13 16:11:26

标签: sql doctrine-orm group-by

我正在尝试查询数据库以从表中获取所有首字母。在SQL中,查询将是:

SELECT SUBSTRING(t.name, 1, 1) AS initial FROM Tool t GROUP BY initial

但是使用QueryBuilder,我还没有找到按别名分组的方法。我试过了:

 $q = $this->em->createQueryBuilder()
     ->select('SUBSTRING(i.name, 1, 1) AS initial')
     ->from('...\Entity\Tool', 't')
     ->groupBy('initial');

Error: 'initial' does not point to a Class.

$q = $this->em->createQueryBuilder()
     ->select('SUBSTRING(t.name, 1, 1)')
     ->from('...\Entity\Tool', 't')
     ->groupBy('SUBSTRING(t.name, 1, 1)');

(t.name, 1, ': Error: Cannot group by undefined identification variable.

在寻找文件半小时后,我再次要求帮助。是否可能,或者我应该采取其他方式?

1 个答案:

答案 0 :(得分:2)

好的,

正如here所解释的,问题来自我原来的sql。 使用DISTINCT解决问题:

$q = $this->em->createQueryBuilder()
    ->select('DISTINCT UPPER(SUBSTRING(t.name, 1, 1))')
    ->from('...\Entity\Tool', 't')
    ->orderBy('t.name');

我添加了一个UPPER以提高安全性。

感谢阅读!