Symfony 4 как удалить сущность из отношений OneToMany - PullRequest
0 голосов
/ 26 февраля 2019

У меня возникла небольшая проблема при удалении объекта, назначенного другому с отношением OneToMany.

У меня есть объект с именем Business, и у него есть свойство "units", которое представляет собой набор объектов Unit.в отношениях OneToMany (в компании может быть много единиц).

Когда я пытаюсь удалить единицу из базы данных, получаю нарушение внешних ключей, это не позволит мне удалить единицу из бизнесасущность.

Вот сокращенная версия обеих сущностей:

БИЗНЕС

/**
 * @ORM\Entity(repositoryClass="App\Repository\BusinessRepository")
 */
class Business
{
    /**
     * @var ArrayCollection
     * @ORM\OneToMany(targetEntity="App\Entity\Unit", mappedBy="business")
     */
    private $units;

}

UNIT

/**
 * @ORM\Entity(repositoryClass="App\Repository\UnitRepository")
 */
class Unit
{
    /**
     * @var Business
     * @ORM\ManyToOne(targetEntity="App\Entity\Business", inversedBy="units")
     * @ORM\JoinColumn(name="business_id", referencedColumnName="id")
     */
    private $business;
}

Итак, в UnitRepository у меня есть метод удаления:

/**
     * @param Unit $unit
     */
    public function delete(Unit $unit){

        $this->em->remove($unit);
        $this->em->flush();
    }

И я получаю эту ошибку:

An exception occurred while executing 'DELETE FROM unit WHERE id = ?' with params [1]:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`businessdirectory`.`unit_day`, CONSTRAINT `FK_F03D80CEF8BD700D` FOREIGN KEY (`unit_id`) REFERENCES `unit` (`id`))

Я не знаю, настроил ли яотношения неправильно или нет здесь, но я должен иметь возможность удалить единицу из бизнеса, и я должен иметь возможность удалить весь бизнес с его единицами.

1 Ответ

0 голосов
/ 26 февраля 2019

Посмотрите, является ли сущность Юнитов владельцем другой связи.В этот момент вам нужно будет сначала удалить все объекты, которые зависят от объекта.Вы можете свободно удалить принадлежащую сторону отношения «один ко многим», но вам нужно будет очистить все принадлежащие элементы перед удалением принадлежащей стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...