我正在尝试查询数据库以从表中获取所有首字母。在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.
在寻找文件半小时后,我再次要求帮助。是否可能,或者我应该采取其他方式?
答案 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以提高安全性。
感谢阅读!