gpt4 book ai didi

doctrine-orm - 教义2.0与2.1级联删除OneToMany

转载 作者:行者123 更新时间:2023-12-04 02:51:42 25 4
gpt4 key购买 nike

您好,当我尝试级联删除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;
}

当我尝试删除实体公司时,我希望分配的地址也将被删除。
$em->remove($company);
$em->flush();

在原则2.1.2中,不执行地址删除操作,因此完整性约束失败。在2.0.2版中,它可以完美运行。奇怪的是,如果我使用EntityAudit扩展名 https://github.com/simplethings/EntityAudit,则LogRevisionListener会在版本2.1.2(当然也在2.0.2中)正确版本化地址实体(将它们设置为revtype = DEL),但是UnitOfWork不会删除它。

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

非常感谢你

最佳答案

尝试在addresses类的Company属性上使用它

@OneToMany(targetEntity="Address",mappedBy="company", 
cascade={"persist"}, orphanRemoval=true)

关于doctrine-orm - 教义2.0与2.1级联删除OneToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7766999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com