小编ste*_*efi的帖子

Doctrine 2.0 vs 2.1 cascade删除OneToMany

你好,我试图在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;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试删除实体公司时,我希望分配的地址也将被删除.

$em->remove($company);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

在原则2.1.2中,不执行地址删除,因此完整性约束失败.在2.0.2版本中,它完美运行.奇怪的是,如果我使用EntityAudit扩展https://github.com/simplethings/EntityAudit,LogRevisionListener正在对doctrine 2.1.2中的地址实体(设置它们的revtype = DEL)进行相应的版本控制(当然在2.0.2中为好吧)但是UnitOfWork并没有删除它.

如何处理2.0.2和2.1.2中的级联删除有什么区别?

非常感谢你

doctrine-orm

10
推荐指数
2
解决办法
7954
查看次数

标签 统计

doctrine-orm ×1