在双向onetomany关系中删除具有级联的实体不会删除引用实体的关联

时间:2013-06-22 12:21:31

标签: zend-framework doctrine

我正在使用带有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"错误"中的所有相关错误删除用户实体时应删除表。这是预期的结果吗?

0 个答案:

没有答案