我想在Doctrine2中使用SQL查询。
我的查询,转到dabatase,执行GROUP BY
用户状态,COUNT
每个州的用户数。
然后我尝试将一个表加入COUNT
所有用户,并为每个州创造一个百分比。
return $this->getEntityManager()
->createQuery("
SELECT COUNT(u.id) as total,
(100*(COUNT( u.id ) / total_users.total)) as percent
FROM UserBundle:User u,
(SELECT COUNT(*) as total
FROM UserBundle:User) as total_users
LEFT JOIN u.idUserEstado ue
GROUP BY u.idUserEstado")
->getResult();
问题是,当我运行Doctrine2查询时,我得到一个例外:
[Semantical Error] line 0, col 397 near
'(SELECT COUNT(': Error: Class '(' is not defined.
Doctrine无法识别SELECT
条款中的FROM
。
答案 0 :(得分:2)
from子句中的select不由doctrine 2
处理关于教条jira的封闭(并且未接受)功能请求:http://www.doctrine-project.org/jira/browse/DDC-2793
DQL是关于查询对象的。支持FROM中的子选择 子句意味着DQL解析器无法构建结果集 映射不再(因为子查询返回的字段可能不匹配 对象了。这就是为什么它不能得到支持(支持它 只有在没有水合作用的情况下运行查询的情况是不行的 IMO因为它意味着查询解析需要依赖于 执行模式)。
答案 1 :(得分:1)
(SELECT COUNT( * ) as total FROM UserBundle:User) as total_users
DQL中可能不存在 COUNT(*)
。试试COUNT(u.id)
,结果会一样。您还可以在EntityRepository中尝试此操作:
$qb->select(array(
'count(u.id) as total',
'(100*(count(u.id)/total_users.total)) as percent',
'select count(u.id) as total_users) as total_users'))
->from('UserBundle:User')
->leftJoin('u.idUserEstado','ue')
->groupBy('u.idUserEstado');
return $qb->getQuery()->getResult();
答案 2 :(得分:0)
... FROM UserBundle:User u, ...
很奇怪。也许它找不到用户类。