你好,我嘗試級聯刪除OneToMany關係中的實體時有問題。 經過幾個小時的調試,我試圖將原理從最新的2.1.2降級到2.0.2,並且突然開始工作。Doctrine 2.0 vs 2.1 cascade刪除OneToMany
想象兩個實體公司和地址關係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中的級聯移除有什麼區別?
非常感謝您
今天我也偶然發現了這個問題,我正在使用2.1.6。 :/ – mokagio
好吧,我必須改正我的自我,現在對我有用!我使用'cascade = {「all」}',但是當我在'cascade = {「remove」}中改變它時''一切都開始正常工作。 – mokagio
雖然我不得不說,可能我的問題可能不完全是由於註釋集或學說本身,因爲我正在對實體進行強化操作,並且在對級聯選項的組合進行了一些測試之後,我發現「合併」選項是一個給出問題的選項。 希望它有幫助:) – mokagio