Я знаю, что есть аналогичные вопросы о SO, но я не нашел ответа на этот вопрос.
Когда я пытаюсь удалить сущность класса EntityA
, которая имеет связь oneToMany с другим классомEntityB
и EntityB
связано с EntityA
Я получаю следующую ошибку:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`example_table`.`entity_b`, CONSTRAINT `FK_CAC822D9B8F92CD8` FOREIGN KEY (`entity_a_id`) REFERENCES `entity_a` (`id`))
(я изменил имена реальных сущностей на EntityA
и EntityB
)
Я попытался настроить Doctrine для установки внешней стороны на стороне-владельце этого отношения на NULL
через настройку cascade
.Но я думаю, потому что я использую его на не-владеющей стороне , он не работает.Но я не уверен, что это так.
EDIT : на самом деле я действительно не уверен, что еще должен делать параметр cascade: detach, если он установлен на стороне владельца.Возможно, мне не хватает некоторого понимания основ доктрины ...
Я знаю, что есть SQL-триггеры (которые могут выполнять операции над событиями удаления и т. Д.), А также способ настроить доктрину для их настройки, но я бы хотелхотел бы сохранить эту логику в своем коде приложения.
Я также хотел бы избежать итерации по коллекциям, проверять, установлены ли отношения, а затем устанавливать их на NULL
по соображениям производительности.
Что я делаю неправильно?Как избежать возникшей ошибки?
Вот два соответствующих определения сопоставления в классах сущностей:
EntityA
class EntityA {
/**
* @ORM\OneToMany(targetEntity="EntityB", mappedBy="entityA", cascade={"detach"})
*/
private $entityBs;
}
EntityB
class EntityB {
/**
* @ORM\ManyToOne(targetEntity="EntityA", inversedBy="entityB")
*/
private $entityA;
}