Doctrine 2.0 vs 2.1 cascade remove OneToMany

Здравствуйте, у меня проблема при попытке каскадного удаления сущностей в отношениях OneToMany. {{1 }} После нескольких часов отладки я попытался понизить версию доктрины с последней версии 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;
}

когда я пытаюсь удалить юридическую компанию, я хочу, чтобы назначенные адреса также были удалены.

$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?

Большое спасибо

10
задан stefi 14 October 2011 в 11:54
поделиться