多对一关系 - 只加入一个值 - Doctrine

时间:2015-08-07 09:40:45

标签: php doctrine-orm

我有以下情况。有些事件有多个时段,当它处于活动状态时。

| Event |
---------
| id    |
| name  |
| owner |


| Runtime |
-----------
| id      |
| idEvent |
| start   |
| end     |

现在,我希望获得具有最早开始日期和最晚结束日期的特定用户拥有的所有事件的列表。例如,对于以下行:

event
id = 2, name = "foo", owner = 1

runtime
id = 1, idEvent = 2, start = "2015-08-10", end = "2015-08-15"
id = 2, idEvent = 2, start = "2015-08-20", end = "2015-08-25"

我想得到结果

event.id = 2, name = "foo", owner = 1, minstart = "2015-08-10", maxend = "2015-08-25"

如何使用Doctrine 2实现这一目标?当然,最终结果中可能会有更多字段,但这些字段至关重要......

2 个答案:

答案 0 :(得分:0)

在这种情况下,我会在事件模型中添加minstart和maxend方法,并在php中计算不使用数据库或doctrine的值。 它应该是一个简单的脚本,你运行throw runtime ArrayCollection并尝试查找start的最小值或者end的最大值。

我认为还有一件事是一对多的关系,而不是一对多,也可能是单向的。

答案 1 :(得分:0)

我找到了一个解决方案 - 实际上有点微不足道,但它可能对某人有所帮助:

//$qb is an instance of QueryBuilder
$qb->select('e.id, e.name, min(r.dateStart) AS min_start, max(r.dateEnd) as max_end')
    ->from('Entity\Event', 'e')
    ->leftJoin('e.eventRuntimes', 'r')