如何使用条件关联建立 ZF2 学说实体
Posted
技术标签:
【中文标题】如何使用条件关联建立 ZF2 学说实体【英文标题】:How to Set up ZF2 Doctrine Entities with Conditional Associations 【发布时间】:2014-04-16 18:41:56 【问题描述】:我正在使用 ZF2 和 Doctrine 开发一个管理日历事件的项目。所有事件共享一组公共数据元素,但独特类型的事件共享它们自己独特的特定类型数据元素集。例如,所有事件都包含eventID
、eventName
和eventDate
等公共元素。除了这些常见元素之外,“会议”事件将具有特定于会议的附加元素,例如 agenda
、minutes
或 attendees
,“培训”事件将具有特定于培训的附加元素,作为“会议”的活动将具有额外的独特元素,等等。
项目的索引视图希望能够列出所有事件,但不需要“通用”数据集之外的任何数据。如果一个事件属于某种类型,它不会也属于另一种类型;所以每个事件只会与一个补充数据集相关联。某些事件类型可能有多个路由器:路由器 sales/meetings[/action]
将希望访问与路由器 marketing/meetings[/action]
相同或相同的实体、字段集和表单。
在我的数据库中,我将有一个名为 events
的表来索引所有事件并记录常见数据,并且我将拥有一个关联表的集合,例如 events_meetings
、events_training
、events_conferences
和等等来记录特定类型的数据。
我正在为该项目考虑多种不同的解决方案:
解决方案一:单个模块、单个events
实体和字段集,以及每个特定于类型的数据元素组的实体和字段集。此解决方案将要求events
实体具有多个 OneToMany 元素:每个关联数据集一个。我不知道这是否可能;而且即使有可能,也不知道是不是个好主意。
解决方案二:单个模块和公共“事件”实体和字段集的重复副本:events_1
链接到events
表并与events_meetings
实体相关联; events_2
与 events_1
相同,但 OneToMany 元素除外,它与 events_training
实体相关联;和events_3
、events_4
、events_5
等都与它们自己的补充数据集实体相关联。我可以看到这是可行的,但它需要许多几乎相同的通用数据实体副本。
解决方案三:多个模块,每个模块都有一个 events
实体和字段集,以及一个关联的 events_foo
实体和字段集。这可能是最简洁的解决方案,尽管它似乎创建了很多相同的代码。
解决方案四:重新配置数据架构,以便所有补充数据都可以存储在一个表中。例如,不是有一个 events_meetings
表,其中每个会议事件都有一行,agenda
有一个列,minutes
有一个列,attendees
有一个列,而是可以创建一个events_alt_data
每个元素和列都有不同的行,例如 eventID
、elementType
、elementTitle
和 eventValue
。 Wordpress 为独特的数据做了类似的事情,但在我的项目中,补充数据集是存储大部分数据的地方,我担心随着数据的增长它可能会影响性能。此解决方案还需要一些创造性的编码来处理数据元素的条件性质,以及如何验证和设置任何类型或长度的数据的选项。
有什么建议吗?
【问题讨论】:
docs.doctrine-project.org/en/2.0.x/reference/… 查看此链接中描述的区分映射,您应该能够映射一个实体,但可以根据数据库行数据的差异与从基础实体创建的多个实体进行交互。跨度> 【参考方案1】:Single Table Inheritance 是要走的路。
【讨论】:
以上是关于如何使用条件关联建立 ZF2 学说实体的主要内容,如果未能解决你的问题,请参考以下文章