2011-01-31 75 views
4

我有一个名为forums与后续的场结构表:主义态关联

  1. OBJECT_TYPE - > [组|页面|锦标赛| etc ..](可能值,每个元素都有自己的表格)

  2. object_id - > [group's id |页面的ID |锦标赛ID |等等。(ID OBJECT_TYPE)

  3. id_forum,4.name等

然后,我有以下表格:GroupPageTournament等。

是它这可能与教条实现吗?

回答

0

我有一个类似的问题。我已经发布了一个关于如何在this post的Doctrine 2.2中实现多态关联的完整示例。

7

这应该是一个评论,但我的声誉太低,对不起。

不幸的是,多态关联与CTI(类表继承)不完全相同:CTI要求所有子类具有相同标识的父表。

CTI可能在大多数情况下工作,但如果您想在已有自己的ID和/或可能具有不同ID类型的现有实体之间创建多态关联,则可能会出现问题。

除了CTI需要在父表中为每个子类创建一个对多态关联无用的记录。多态关联不应该要求任何表,它应该只用(id,type)条件连接现有的表。为了简单/性能的原因,我认为Doctrine需要父表。

当CTI不是解决方案时,我建议模拟Repository级别的多态关联,即创建一个具有$ type属性的抽象Repository,并实现一个可以自动将当前查询连接到目标表的polymorphicJoin方法id /类型条件。然后用您的子类Repositories扩展抽象的Repository,并在find/select方法需要时调用polymorphicJoin方法。

如果这种关联是在教义中实现的,那将是非常棒的。