是否可以在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 '.'")
但它什么也没告诉我。 谢谢你的帮助。
答案 0 :(得分:1)
在我看来,您可以定义Event
和List
之间的关联,并使用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
运算符。