Symfony one-to-one как сделать уникальные связи?
Стек: symfony, sonata admin, doctrine. Есть две сущности, сделал между ними связь одни к одному. Но как сделать, чтобы связи были уникальны?
class Purchase{
/**
* @var Enhancement | null
* @ORM\OneToOne(targetEntity="AppBundle\Entity\enhancement", mappedBy="purchase")
*/
private $enhancement;
public function setEnhancement(?Enhancement $enhancement): void
{
$enhancement && $enhancement->setPurchase($this);
$this->enhancement = $enhancement;
}
}
class Enhancement
{
/**
* @var Purchase | null
* @ORM\OneToOne(targetEntity="AppBundle\Entity\Purchase", inversedBy="enhancement")
* @ORM\JoinColumn(name="purchase_id",referencedColumnName="id")
*/
private $purchase;
}
Нужно сделать так, чтобы если я в Purchase устнаваливаю Enhancement, который уже привязан к другой Purchase выдавалась ошибка валидации на уровне кода, а не бд (если выставить уникальный индекс). А еще лучше если у другого Enhancement будет устанавливаться null.
А вообще если можно и так, и так- посмотрел бы на все варианты. Спасибо.
П.С. Если сохранять Enhancement, то работает @UniqueEntity. Но я бы хотел сохранять именно Purchase