我有一个名为forums
的表,其中包含以下字段结构:
object_type - > [组|页面|比赛| etc ....](可能的值。每个元素都有自己的表)
object_id - > [小组的id |页面的ID |锦标赛的id | etc ..](id object_type)
id_forum,4.name等
然后我有以下表格:Group
,Page
,Tournament
等。
是否可以用doctrine实现这个?
答案 0 :(得分:7)
这应该是评论,但我的声誉太低,抱歉。
不幸的是,多态关联与CTI(类表继承)并不完全相同:CTI要求所有子类具有相同id的父表。
在大多数情况下,CTI可能会起作用,但如果您想在已拥有自己的ID和/或可能具有不同ID类型的现有实体之间创建多态关联,则可能会出现问题。
除了CTI要求在父表中为每个子类创建一条记录,这对于多态关联是无用的。多态关联不应该需要任何表,它应该只是加入具有(id,type)条件的现有表。我认为,出于简单/性能原因,Doctrine需要父表。
当CTI不是解决方案时,我建议在存储库级别模拟多态关联,即创建一个带有$ type属性的抽象存储库,并实现一个polymorphicJoin方法,该方法会自动将当前查询与目标表连接到id /类型条件。然后使用您的子类Repositories扩展抽象存储库,并在需要的find / select方法中调用polymorphicJoin方法。
如果在Doctrine中实现了这种关联,那将是非常棒的。
答案 1 :(得分:5)
我认为你要找的东西可以用继承来完成。
检查http://www.doctrine-project.org/docs/orm/2.0/en/reference/inheritance-mapping.html以获取详细说明。
答案 2 :(得分:0)
我有类似的问题。我在this post中发布了一个关于如何在Doctrine 2.2中实现多态关联的完整示例。