Здравствуйте, у меня возникли проблемы при попытке каскадного удаления объектов в отношениях OneToMany. После нескольких часов отладки я попытался понизить доктрину с последней версии 2.1.2 до 2.0.2, и она неожиданно начинает работать.
Представьте два объекта Компания и Адрес в отношении 1: N.
/**
* @Entity
*/
class Company extends Entity
{
/**
* @var integer
* @id @Column(type="integer")
* @generatedValue
*/
private $id;
/**
* @var Collection
* @OneToMany(targetEntity="Address",mappedBy="company", cascade={"persist","remove"})
*/
private $addresses;
}
/**
* @Entity
*/
class Address extends Entity
{
/**
* @var integer
* @id @Column(type="integer")
* @generatedValue
*/
private $id;
/**
* @var Company
* @ManyToOne(targetEntity="Company", inversedBy="addresses")
* @JoinColumn(name="company_id", referencedColumnName="id",nullable=false)
*/
private $company;
}
когда я пытаюсь удалить компанию Company, мне бы хотелось, чтобы назначенные адреса также были удалены.
$em->remove($company);
$em->flush();
В доктрине 2.1.2 удаление адресов не выполняется, поэтому ограничение целостности терпит неудачу. В версии 2.0.2 он работает отлично. Более странная вещь, если я использую расширение EntityAudit https://github.com/simplethings/EntityAudit, LogRevisionListener является корневым версией объектов адресов (установить их revtype = DEL) в доктрине 2.1.2 (из курс в 2.0.2), но UnitOfWork не удаляет его.
Есть ли разница в том, как обрабатывать каскадное удаление в версиях 2.0.2 и 2.1.2?
Большое спасибо