如何使用条件关联建立 ZF2 学说实体

Posted

技术标签:

【中文标题】如何使用条件关联建立 ZF2 学说实体【英文标题】:How to Set up ZF2 Doctrine Entities with Conditional Associations 【发布时间】:2014-04-16 18:41:56 【问题描述】:

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

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

在我的数据库中,我将有一个名为 events 的表来索引所有事件并记录常见数据,并且我将拥有一个关联表的集合,例如 events_meetingsevents_trainingevents_conferences 和等等来记录特定类型的数据。

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

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

解决方案二:单个模块和公共“事件”实体和字段集的重复副本:events_1 链接到events 表并与events_meetings 实体相关联; events_2events_1 相同,但 OneToMany 元素除外,它与 events_training 实体相关联;和events_3events_4events_5 等都与它们自己的补充数据集实体相关联。我可以看到这是可行的,但它需要许多几乎相同的通用数据实体副本。

解决方案三:多个模块,每个模块都有一个 events 实体和字段集,以及一个关联的 events_foo 实体和字段集。这可能是最简洁的解决方案,尽管它似乎创建了很多相同的代码。

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

有什么建议吗?

【问题讨论】:

docs.doctrine-project.org/en/2.0.x/reference/… 查看此链接中描述的区分映射,您应该能够映射一个实体,但可以根据数据库行数据的差异与从基础实体创建的多个实体进行交互。跨度> 【参考方案1】:

Single Table Inheritance 是要走的路。

【讨论】:

以上是关于如何使用条件关联建立 ZF2 学说实体的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 zf2 / 学说下的实体之间创建继承时出现“找不到类”

如何通过学说实体之间的 ID 建立一对一的关系

与学说映射学说 2 的关联失败

zf2 + 学说 2 上的用户定义函数不起作用

基于模型实例获取学说结果

学说选择innerJoined实体或没有关联的实体