symfony2 / doctrine2 - dql subselect

时间:2012-06-29 21:02:30

标签: symfony doctrine-orm

是否可以在dql中使用subselect获取数据并将结果放在不属于实体列的class属性中?

hasfreelist 是一个类属性,但不是mysql中的实体列。

这是我的dql:

SELECT e, DATE(e.begin) dbegin, 
(SELECT COUNT(g) FROM AcmeDemoBundle:list  g WHERE e.id = g.fkevent) AS e.hasfreelists     
FROM AcmeDemoBundle:event e JOIN e.fklocation l 
WHERE e.enabled=1 e.begin>=:from 
ORDER BY dbegin, e.topevent DESC

我有以下错误:

An exception has been thrown during the rendering of a template 
("[Syntax Error] line 0, col 143: Error: 
Expected Doctrine\ORM\Query\Lexer::T_FROM, got '.'")

但它什么也没告诉我。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

在我看来,您可以定义EventList之间的关联,并使用SIZE function添加您的选择。这种方式更容易和合乎逻辑:

SELECT e, DATE(e.begin) AS dbegin, SIZE(e.lists) AS number_of_lists
FROM [...]

您仍然可以在实体类上定义hasFreeList方法,该方法将返回sizeof($this->lists) > 0

但我认为,您收到此错误的原因是因为您将子选择定义为e.hasfreelist。虽然它是您的类的属性,但这是一个DQL语法错误(应该是(SELECT x FROM y) AS z)。此外,您的日期选择缺少AS运算符。