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


Ответы (0 шт):