如何在超类上应用UniqueEntity验证

时间:2012-01-23 18:42:07

标签: symfony doctrine-orm

在定义具有多个实现的抽象超类时,我无法使UniqueEntity检查起作用。

例如,在创建具有电子邮件字段和FacebookUser / TwitterUser的AbstractUser时,UniqueEntity检查只是子类。不是父母。

有关如何在顶级应用唯一身份检查的任何想法?

编辑:我正在使用带有鉴别器列的joined表继承。见doctrine documentation.

2 个答案:

答案 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)
 */