在定义具有多个实现的抽象超类时,我无法使UniqueEntity检查起作用。
例如,在创建具有电子邮件字段和FacebookUser / TwitterUser的AbstractUser时,UniqueEntity检查只是子类。不是父母。
有关如何在顶级应用唯一身份检查的任何想法?
编辑:我正在使用带有鉴别器列的joined
表继承。见doctrine documentation.
答案 0 :(得分:1)
在这种情况下,您可能需要编写自己的验证约束来检查唯一性。
逻辑上不清楚UniqueEntity约束在这种情况下应该如何应用。 是否应检查所有扩展类的属性的唯一性或仅检查当前使用的类?
由于UniqueEntity约束在表中查找属性的唯一性,因此默认行为不涵盖第二个变体。 因此,您不能对当前使用单表继承扩展的类使用约束。
关于问题评论:
FOSUserBundle在config/validaton.xml中不包含UniqueEntity约束。
...但是可以找到orm,mongodb,couchdb和推进,即在config/orm/orm.xml中。
FOSUserBundle使用@MappedSuperClass而不是连接表继承。
答案 1 :(得分:1)
您可以使用超类定义约束配置中的entityClass
参数,如下所示:
/**
* @UniqueEntity(fields={"email"}, entityClass=User::class)
*/