【问题标题】:Doctrine 2 does not recognize SELECT on the FROM clauseDoctrine 2 无法识别 FROM 子句中的 SELECT
【发布时间】:2015-01-10 11:52:00
【问题描述】:

我想在 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 无法识别 FROM 子句中的 SELECT

【问题讨论】:

    标签: mysql doctrine-orm


    【解决方案1】:

    学说 2 不处理 from 子句上的选择

    关于教义的 jira 有一个已关闭(不被接受)的功能请求:http://www.doctrine-project.org/jira/browse/DDC-2793

    DQL 是关于查询对象的。支持 FROM 中的子选择 子句表示 DQL 解析器无法构建结果集 不再映射(因为子查询返回的字段可能不匹配 对象了)。这就是为什么它不能被支持(支持它 仅适用于您在没有水合的情况下运行查询的情况是不行的 IMO,因为这意味着查询解析需要依赖于 执行模式)。

    【讨论】:

      【解决方案2】:
      (SELECT COUNT( * ) as total FROM UserBundle:User) as total_users
      

      COUNT(*) 可能不存在于 DQL 中。试试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

      【讨论】:

      • 是的,这是我遇到的另一个错误,感谢您的报告:),我已经更正了,但问题仍然存在。
      • 我刚刚编辑了我的答案,也许你应该尝试使用 querybuilder 进入你的 UserRepository
      【解决方案3】:

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

      很奇怪。也许它找不到类 User。

      【讨论】:

      • 他似乎没有意识到 FROM 中的所有 (SELECT COUNT( * ) as total FROM UserBundle:User) 作为 total_users
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多