我在 Zend 框架中使用了学说 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"} 存在于关系的两侧。
Case1:现在,如果我从反面(用户)中删除一个实体,所有与该用户相关的错误都会从“错误”表中删除。这是预期的行为。
案例2:现在,如果我从拥有方(错误)中删除一个实体,则引用的用户实体将从“用户”表中删除,但是它不会将此删除级联到“错误”中该用户实体的关联实体桌子。我的意思是,就像案例 1 一样,当删除用户实体时,“错误”表中的所有相关错误都应该被删除。这是预期的结果吗?