在我的使用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
的子类。从数据库中删除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
如果我将targetEntity
的{{1}}更改为Entity::$mappedSuperclasses
或Subclass1
,则会有效。我的设置无法实现Subclass2
吗?我错过了什么?
答案 0 :(得分:0)
我通过将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;
}
答案 1 :(得分:0)
我在问题解决后的一年回答,但我遇到了同样的问题。当我尝试清空count countCollection时发生错误。
因此,解决方案是检查$ this->实体是否为数组,然后返回其长度。