0

Моя цель - проверить сущность с уникальным ограничениемEntity в поле. Это поле состоит из 2 не сопоставленных полей, объединенных с использованием обратного вызова PrePersist жизненного цикла. Проблема в том, что проверка не происходит, и система позволяет мне вставлять данные в базу данных, когда это не должно.symfony - единственное ограничение сущности с не отображаемым полем

/** 
* Recipe 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="AppBundle\Entity\RecipeRepository") 
* @ORM\HasLifecycleCallbacks() 
* @UniqueEntity(
*  ignoreNull = false, 
*  fields={"amount"}, 
*  message="Not valid" 
*) 
*/ 
class Recipe 
{...} 

...

/** 
* @ORM\PrePersist() 
*/ 
public function preSave() 
{ 
    $this->amount = $this->getAmountInteger() . '.' . $this->getAmountDecimal(); 
} 
+0

Как насчет '@ORM \ Column (name =" amount ", type =" string ", length = 255, unique = true)' above attribute 'amount' _ (сохранить ограничение UniqueEntity) _? – Delphine

+0

Не является 'unique = true', предназначенным только для схемы? –

+0

@Delphine, с уникальным = истинным ограничением, установленным на поле, я не могу правильно проверить свою форму и обработать уникальность строки. Фактически, проверка выполняется с флешем, а не с формальным методом. –

ответ

0

У меня есть объект с этим определением и работать нормально, но ваш случай отличается, потому что ваш набор 'количество' в preSave ...

* @UniqueEntity(fields={"amount"}, message="Not valid") 
* @ORM\Table(uniqueConstraints={@ORM\UniqueConstraint(name="unique_amount", columns={"amount"})}) 

И в другой сущности я использовал

@ORM\Column(type="string", length=127, nullable=false, unique=TRUE) 

Th e different - в первом случае я использую ключ compuest и определяю ключ в полях = {field1, field2} .. во втором примере я использую простой уникальный ключ.