Если у вас есть entityA с отношением OneToMany для entityB, а entityB имеет уникальные ограничения для таких полей:
/**
* @ORM\Column(type="string", length=100, nullable=true, unique=true, options={"default":""})
* @Assert\Valid()
* @var string
*/
protected $url = '';
а ваш нормальный вы бы добавили к аннотациям класса сущностей:
@UniqueEntity(fields={"url"}, message="Url can be assigned only to one trigger")
но это не будет работать в классе администратора сонаты для entityA.
Чтобы это работало, есть довольно приятный и простой способ:
В административном классе entityA добавьте:
/**
* @param ErrorElement $errorElement
* @param mixed $object
*/
public function validate(ErrorElement $errorElement, $object)
{
parent::validate($errorElement, $object);
$errorElement
->with('entityB') //field describing connection to entityB in entityA
->addConstraint(
new All(
[
new UniqueEntity(
[
'fields' => 'url',
'message' => 'Url can be assigned only to one trigger',
]
),
]
)
)
->end();
}
И это оно! Валидация дочерних сущностей их уникального поля будет работать нормально в классе администратора.
Задача ещё не решена.
Других решений пока нет …