#symfony
#symfony
Вопрос:
У меня есть таблица базы данных, как показано ниже:
payment_method
--------------
pk id
fk payer_id
payment_method
bank_name
Здесь payer_id может иметь нулевое значение. У меня есть уникальность, как показано ниже
* @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
Как я могу это исправить?
Ответ №1:
Установить ignoreNull=false
. Если установлено значение false, допускается только одно значение null — если второй объект также имеет значение null, проверка завершится ошибкой.
http://symfony.com/doc/current/reference/constraints/UniqueEntity.html#ignorenull
Комментарии:
1. наличие
ignoreNull=true
позволяет нескольким сущностям быть нулевыми.ignoreNull=false
позволяет одному значению быть нулевым. итак, какignoreNull=false
решить проблему сбоя проверки при payer_id=null (единственное значение равно null)? Как ignoreNull=true, так и false должны разрешать эту проверку, нет?
Ответ №2:
Вы можете явно установить значение ignoreNull в true в качестве параметра в ограничении UniqueEntity, тогда ваш будет выглядеть так:
* @UniqueEntity(
* fields={"paymentMethod","payer","bank"},
* errorPath="payer",
* message="This payment source is already in use.",
* groups={"persist"},
* ignoreNull=true
* )
Однако этот параметр является значением по умолчанию, и я сомневаюсь, что вы его изменили, поэтому ошибка, вероятно, заключается в том, что вы установили для некоторых полей значение unique=true
a @ORMColumn( ..., unique=true)
.
Это не будет проверяться ограничениями проверки, и, честно говоря, это практически невозможно сделать для любой базы данных SQL, чтобы разрешить ограничение уникальности с несколькими значениями NULL.
Вам придется удалить unique=true
из вашего @ORMColumn
определения.