Проверка уникальности в symfony 2

#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 определения.