我有一个数据库表如下:
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
我该如何解决这个问题?
答案 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