我正在使用带有Zend框架的doctrine 2.0。我有以下两个实体,它们之间存在双向关系。
错误表
/**
* Bugs
*
* @Table(name="bugs")
* @Entity
*/
class Bugs
{
/**
* @var integer $id
*
* @Column(name="id", type="integer")
* @Id
* @GeneratedValue
*/
private $id;
/**
* @ManyToOne(targetEntity="Users", inversedBy="reportedBugs",cascade={"persist","remove"})
* @JoinColumn(name="reporter_id", referencedColumnName="id")
**/
protected $reporter;
public function setReporter($reporter)
{
$reporter->addReportedBug($this);
$this->reporter = $reporter;
}
用户表
/**
* Users
*
* @Table(name="users")
* @Entity
*/
class Users
{
/**
* @var integer $id
*
* @Column(name="id", type="integer")
* @Id
* @GeneratedValue
*/
private $id;
/**
* @OneToMany(targetEntity="Bugs", mappedBy="reporter",cascade={"persist","remove"})
* @var Bugs[]
**/
private $reportedBugs = null;
public function addReportedBug($bug)
{
$this->reportedBugs[] = $bug;
}
public function __construct()
{
$this->reportedBugs = new \Doctrine\Common\Collections\ArrayCollection();
}
}
你可以看到cascade = {" remove"}在关系的两个方面都存在。
情况1: 现在,如果我从反面(用户)中删除实体,那么引用该用户的所有相关错误都会从"错误"中删除。表。这是预期的行为。
情况2: 现在,如果我从拥有方(Bugs)中删除实体,则从"用户"中移除所引用的用户实体。表,但它不会将此删除级联到"错误"中的此用户实体的关联实体。表。我的意思就像案例1"错误"中的所有相关错误删除用户实体时应删除表。这是预期的结果吗?