你好,我试图在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中的级联删除有什么区别?
非常感谢你
Ent*_*tea 10
尝试在类的addresses
属性上使用它Company
@OneToMany(targetEntity="Address",mappedBy="company",
cascade={"persist"}, orphanRemoval=true)
Run Code Online (Sandbox Code Playgroud)
小智 1
我遇到了同样的问题,我用该代码解决了他:
$em->remove($object);
$em->flush();
$em->remove($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
findAll
也许你可以在你的company
地址上使用 a并用foreach
类似的方法删除它:
// Return all the addresses of the company
$addresses = $em->getRepository(...)->findAllAddressesByCompany($company);
$em->remove($company);
foreach ($address in $addresses)
{
$em->remove($address);
}
Run Code Online (Sandbox Code Playgroud)
这不是一个很好的方法,但目前,这就是我所找到的。
归档时间: |
|
查看次数: |
7954 次 |
最近记录: |