如何在DQL中将子查询用作FROM

时间:2018-02-13 12:36:37

标签: doctrine-orm dql zend-framework3

我正在使用Zend Framwork 3和Doctrine 2.我得到了一个相对复杂的DQL,其中包含多个连接和where子句。

我现在需要为having子句中具有不同参数的查询获取一些行计数。我认为SELECT COUNT(*) FROM (original-query) AS c是最简单的方法。但是当尝试使用本机查询时,我遇到了将参数从DQL绑定到本机查询以及尝试执行时遇到的问题。喜欢

$queryBuilder->select('count(c)')->from('('.$originalQuery->getDQL().')', 'c');

我得到:

Error: Class '(' is not defined.

1 个答案:

答案 0 :(得分:0)

<强>更新

似乎你不能这样使用它:

  

由stof创建的评论:

     

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

     

在您的情况下,最好的解决方案可能是运行SQL查询   (因为你得到一个标量,无论如何你都不需要ORM水合作用)

https://github.com/doctrine/doctrine2/issues/3542