Doctrine 2 ORM Cascading删除相关实体

时间:2015-11-07 07:37:52

标签: orm doctrine-orm zend-framework2

我想检查我的语法是否正确,以便级联删除以下实体,我希望当我删除主题或用户时,它会级联并删除与之相关的教师实体。

教师实体

class Teacher{

    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     **/
    protected $id;

    /** @ORM\Column(type="integer")
     * @ORM\ManyToOne(targetEntity="Subject")
     * @ORM\JoinColumn(name="subjectId", referencedColumnName="id",  onDelete="CASCADE")
     *  */
    protected $subjectId;

    /** @ORM\Column(type="integer")
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(name="userId", referencedColumnName="id",  onDelete="CASCADE")
     *  */
    protected $userId;

}

主题实体

/** @ORM\Entity */
class Subject{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /** @ORM\Column(type="integer") */
    protected $sectionId;

    /** @ORM\Column(type="string") */
    protected $subjectName;

用户实体

/** @ORM\Entity */
class User {
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /** @ORM\Column(type="string") */
    protected $username;

    /** @ORM\Column(type="string") */
    protected $password;

    /** @ORM\Column(type="string") */
    protected $first_name;

    /** @ORM\Column(type="string") */
    protected $middle_name;

    /** @ORM\Column(type="string") */
    protected $last_name;

    /** @ORM\Column(type="string") */
    protected $sex;

    /** @ORM\Column(type="date") */
    protected $dob;

    /** @ORM\Column(type="boolean") */
    protected $is_active;

    /** @ORM\Column(type="boolean") */
    protected $is_admin;

    /** @ORM\Column(type="string") */
    protected $email;

    /** @ORM\Column(type="string") */
    protected $address;

    /** @ORM\Column(type="string") */
    protected $bloodTypeId;

    /** @ORM\Column(type="string") */
    protected $photo;

    /** @ORM\Column(type="integer") */
    protected $userTypeId;

因为当我删除用户或主题时它似乎不起作用,我希望删除与其字段相关的教师。

2 个答案:

答案 0 :(得分:0)

如果你在堆栈上搜索 overlflow ,你的答案已经 here

  

Doctrine中有两种级联:

     

1)ORM级别 - 在关联中使用cascade={"remove"} - 这是在UnitOfWork中完成的计算,不会影响数据库结构。删除对象时,UnitOfWork将遍历关联中的所有对象并将其删除。

     

2)数据库级别 - 在关联onDelete="CASCADE"上使用joinColumn - 这会将删除级联添加到数据库中的外键列:

您的onDelete="CASCADE"主题和教师内部用户将获得以下结果:当您删除教师时,操作将级联到主题和用户(因此也会删除它们)。我想这不是你想要的......

答案 1 :(得分:0)

不,我想在删除用户时删除教师,当我删除主题时也会删除教师