当孩子持续存在时,更新一对多关系中的总和

时间:2015-05-28 14:08:25

标签: symfony doctrine-orm

我的宠物学习项目是一个简单的项目管理/任务应用程序,具有以下实体关系:

项目有很多任务 任务有很多活动

Activity基本上是一个带有startedAt,endedAt和durationInSeconds的时间日志。

项目和任务有一个名为durationInSecondsSum的列,每次持久,更新,删除活动时都需要更新。

durationInSecondsSum是Activity :: durationInSeconds之和的聚合字段。

我的问题是......在Project和Task中更新durationInSecondsSum属性的最佳方法是什么。

我考虑过的可能选项,但还没有完全包裹我的脑袋:

聚合根。

如此处所述:http://doctrine-orm.readthedocs.org/en/latest/cookbook/aggregate-fields.html

给定一个Activity :: durationInSeconds可以随时编辑,并且更改需要从Activity冒泡到Task和Project我不知道如何在链中实现这一点。

学说事件

我之前已经实现了一个postFlush事件来计算前一个项目中的总和。在阅读了有关事件的更多信息后,似乎这是一个糟糕的实现,可能导致双重实体。

我还考虑过onFlush可能会更好。

我在这里看到的问题是,如果活动尚未保存,我将无法直接从数据库计算总和。

消息队列

触发更新任务和项目的消息似乎有些过分。

持续时间服务

一个单独的服务,它接收任务/项目的集合并动态计算它们的持续时间,而不会将该数据保存到数据库。

非常感谢任何指导/经验/战争故事。

0 个答案:

没有答案