【发布时间】:2018-01-30 09:16:53
【问题描述】:
我有一个包含事件标题和描述的事件表,还有一个 eventInstance 表,其中存储了事件的日期和地点。所以这是一对多的关系:一个事件可以有很多实例。
我现在尝试的是仅选择事件的最新事件实例。在 SQL 中,查询是:
select e.id, e.title, ei.start_date
from event e
LEFT join event_instance ei on ei.id =
(SELECT id FROM event_instance ei where ei.event_id = e.id ORDER BY start_date asc, start_time asc LIMIT 1)
ORDER BY start_date asc, start_time asc LIMIT 20;
我正在尝试重写 dql 中的 sql 命令。到目前为止,我得到了这个:
SELECT e, ei
FROM AppBundle:Event e LEFT JOIN e.eventInstances ei WITH ei =
(SELECT a FROM AppBundle:EventInstance a WHERE a.event = e ORDER BY a.startDate asc, a.startTime asc)
我的问题是,dql 中没有 LIMIT 命令,所以我不能限制子查询给我一个结果。所以我在执行这个查询时遇到的错误是:
SQLSTATE[21000]: Cardinality violation: 7 ERROR: more than one row returned by a subquery used as an expression
有什么方法可以让我完成这项工作吗?
【问题讨论】:
标签: php symfony doctrine-orm greatest-n-per-group dql