Doctrine 2不识别FROM子句上的SELECT

时间:2012-06-21 11:43:02

标签: mysql doctrine-orm

我想在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

3 个答案:

答案 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();

来源:Google UserGroup issue

答案 2 :(得分:0)

...  FROM UserBundle:User u, ...

很奇怪。也许它找不到用户类。