symfony 2中的UniqueEntity验证

时间:2014-06-15 15:32:19

标签: symfony

我有一个数据库表如下:

 payment_method
 --------------
 pk id
 fk payer_id
    payment_method
    bank_name

这里payer_id可以有空值。我有一个UniqueEntity,如下所示

* @UniqueEntity(
*     fields={"paymentMethod","payer","bank"},
*     errorPath="payer",
*     message="This payment source is already in use.",
*     groups={"persist"}
* )

如果payer_id不为null,则此验证可以正常工作。它不适用于以下情况:

 id    payer_id    bank_name  payment_method
 1                 US Bank      credit card
 2                 US Bank      credit card

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

你可以在UniqueEntity约束中将ignoreNull显式设置为true作为选项,你的颜色如下:

* @UniqueEntity(
*     fields={"paymentMethod","payer","bank"},
*     errorPath="payer",
*     message="This payment source is already in use.",
*     groups={"persist"},
*     ignoreNull=true
* )

但是此选项是默认值,我怀疑您是否更改了它,因此错误可能是您在unique=true处将某些字段设置为@ORM\Column( ..., unique=true)

验证约束不会验证这一点,坦率地说,几乎不可能对任何SQL数据库进行验证,以允许具有多个NULL值的唯一约束。

您必须从unique=true定义中删除@ORM\Column

答案 1 :(得分:1)

设置ignoreNull=false。如果设置为false,则只允许一个空值 - 如果第二个实体也具有空值,则验证将失败。

http://symfony.com/doc/current/reference/constraints/UniqueEntity.html#ignorenull

相关问题