如何使用条件关联设置ZF2 Doctrine实体

时间:2014-04-16 18:41:56

标签: orm doctrine-orm zend-framework2

我正在使用ZF2和Doctrine开发一个管理日历事件的项目。所有事件共享一组公共数据元素,但唯一类型的事件共享其自己唯一的特定于类型的数据元素集。例如,所有事件都包含常见元素,例如eventIDeventNameeventDate。除了这些常见元素之外,“会议”事件还会包含特定于会议的其他元素,如agendaminutesattendees,“培训”的事件将具有其他元素特定于培训的元素,作为“会议”的事件将具有其他独特元素,等等。

项目的索引视图希望能够列出所有事件,但不需要“常用”数据集之外的任何数据。如果一个事件属于某种类型,它也不属于另一种类型;所以每个事件只与一个补充数据集相关联。某些事件类型可能有多个路由器:路由器sales/meetings[/action]将希望访问与路由器marketing/meetings[/action]相同或相同的实体,字段集和表单。

在我的数据库中,我将有一个名为events的表来索引所有事件并记录公共数据,我将拥有一组关联表,如events_meetingsevents_trainingevents_conferences等,以记录特定于类型的数据。

我正在为该项目考虑许多不同的解决方案:

解决方案一:单个模块,单个events实体和字段集,以及每个特定于类型的数据元素组的实体和字段集。此解决方案将要求events实体具有多个OneToMany元素:每个关联数据集一个元素。我不知道这是否可行;即使有可能,我也不知道这是不是一个好主意。

解决方案二:单个模块和常见“事件”实体和字段集的重复副本:events_1链接到events表并与{相关联{1}}实体; events_meetingsevents_2相同,但OneToMany元素除外,它与events_1实体相关联;并且events_trainingevents_3events_4等各自与其自己的补充数据集实体相关联。我可以看到这个工作,但它需要很多几乎相同的公共数据实体副本。

解决方案三:多个模块,每个模块都有一个events_5实体和字段集,以及一个关联的events实体和字段集。这可能是最干净的解决方案,虽然它似乎创建了许多相同的代码。

解决方案四:重新配置数据架构,以便所有补充数据都可以存储在单个表中。例如,不是让events_foo表为每个会议事件和events_meetings列添加一行,而是agenda的列和minutes的列,可以创建一个attendees表,其中每个元素和列都有不同的行,例如events_alt_dataeventIDelementTypeelementTitle。 Wordpress对于唯一数据执行类似的操作,但在我的项目中,补充数据集是存储大部分数据的地方,我担心随着数据的增长它可能会影响性能。此解决方案还需要一些创造性的编码来处理数据元素的条件性质,以及如何验证和设置任何类型或长度的数据选项。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

Single Table Inheritance是要走的路。