我有一个实体SomeMainEntity,它扩展了MainEntity。 SomeMainEntity包含GroupEntity以及SubEntity的集合。 SQL将是:
MainEntity
SomeMainEntity扩展MainEntity
GroupEntity
SubEntity
现在,我希望更改SubEntity,以便该名称对于SomeMainEntity中给定的GroupEntity是唯一的。我尝试了以下方法:
SubEntity
但这显然不起作用,因为some_main_entity id / group_entity_id显然必须是复合PK。另外,由于SomeMainEntity扩展了MainEntity,因此即使不是不可能的情况,也会有些棘手。我还尝试在SomeMainEntity中创建唯一键,但是Doctrine似乎不支持(https://stackoverflow.com/a/24364419/1032531)
作为另一种尝试,我将GroupEntity添加为SubEntity中的属性
SubEntity
现在,我可以在name和group_entity_id之间添加唯一的约束,但这确实不对,因为它不能确保给定的关联MainEntity也包含相同的GroupEntity。
这怎么实现?
答案 0 :(得分:0)
最终采用了更传统的SQL方法,该方法易于使用Doctrine实施。
前三个表保持不变:
MainEntity
SomeMainEntity扩展MainEntity
GroupEntity
然后添加了一个额外的表:
MainEntityHasGroupEntity
然后在最后一张桌子上使用该多余的桌子:
子实体