主义多态关联

apr*_*cai 4 doctrine

我有一个以forums以下字段结构命名的表:

  1. object_type - > [Group | 页面| 比赛| etc ....](可能的值.每个元素都有自己的表)

  2. object_id - > [group的id | 页面的ID | 锦标赛的id | 等..](id object_type)

  3. id_forum,4.name等

然后,我有如下表:Group,Page,Tournament等.

是否有可能通过学说来实现这一点?

Mat*_*sta 8

这应该是一个评论,但我的声誉太低,抱歉.

遗憾的是,多态关联与CTI(类表继承)并不完全相同:CTI要求所有子类具有相同id的父表.

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

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

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

如果在Doctrine中实现这种关联,那将是非常棒的.


Hak*_*yal 5

我认为你要找的东西可以用继承来完成.

有关详细说明,请查看http://www.doctrine-project.org/docs/orm/2.0/en/reference/inheritance-mapping.html.