[英]Doctrine2 cascade delete doesn't work with Abstract Class
在我用Symfony2構建的Web應用程序中,包含以下實體:
/**
* @ORM\Entity
* @ORM\Table
*/
class Entity
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(name="id", type="integer")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="MappedSuperclass", mappedBy="entity", cascade={"persist", "remove"})
*/
private $mappedSuperclasses;
}
/**
* @ORM\MappedSuperclass
*/
abstract class MappedSuperclass
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(name="id", type="integer")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Entity", inversedBy="mappedSuperclasses")
* @ORM\JoinColumn(name="entity_id", referencedColumnName="id", nullable=false)
*/
protected $entity;
}
/**
* @ORM\Entity
* @ORM\Table(name="table_1")
*/
class Subclass1 extends MappedSuperclass
{
/**
* @ORM\Column(name="unique_member", type="string")
*/
private $uniqueMember;
}
/**
* @ORM\Entity
* @ORM\Table(name="table_2")
*/
class Subclass2 extends MappedSuperclass
{
/**
* @ORM\Column(name="unique_member", type="string")
*/
private $uniqueMember; // This is different from Subclass1
}
我會解釋一下。 Entity
具有MappedSuperclass
的集合。 MappedSuperclass
是一個抽象類,其中包含一些子類的公共變量。 Subclass1
和Subclass2
是MappedSuperclass
Subclass2
類。 當從數據庫中刪除Entity
, $mappedSuperclasses
的項目應一起刪除,這就是為什么設置了cascade={"persist", "remove"}
。
但是,當我嘗試刪除Entity
,出現以下錯誤:
ContextErrorException: Notice: Undefined index: entity in C:\\project\\vendor\\doctrine\\orm\\lib\\Doctrine\\ORM\\Persisters\\BasicEntityPersister.php line 1753
如果我將Entity::$mappedSuperclasses
的targetEntity
更改為Subclass1
或Subclass2
,它將起作用。 我的設置無法實現ON DELETE CASCADE
嗎? 我想念什么?
我通過將ON DELETE
動作設置為數據庫級別來解決此問題:
/**
* @ORM\Entity
* @ORM\Table
*/
class Entity
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(name="id", type="integer")
*/
private $id;
}
/**
* @ORM\MappedSuperclass
*/
abstract class MappedSuperclass
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(name="id", type="integer")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Entity")
* @ORM\JoinColumn(name="entity_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
protected $entity;
}
問題解決后,我回答了一年,但我遇到了同樣的問題。 當我嘗試清空countArrayCollection時發生錯誤。
因此解決方案是檢查$ this-> entity是否為array,然后返回其長度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.