2015-11-07 94 views
-1

我想检查我的语法是否适用于级联删除下列实体,我希望在删除Subject或级联用户时删除与它们相关的Teacher实体。Doctrine 2 ORM级联删除相关实体

教师实体

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; 

因为它似乎并没有在工作的时候删除用户或一个主题,我期待与他们的领域相关的老师也被删除。

+0

结帐[这个答案]( http://stackoverflow.com/questions/6328535/on-delete-cascade-with-doctrine2)。您正在使用'@ joinColumn'中的数据库级联级联而不是'cascade = {“remove”}'进行ORM级别删除。如果您想要数据库级别级联,那么您还需要运行创建/更新架构cli工具,以便将它们添加到数据库中。 – AlexP

回答

0

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

有两种级联的学说:

1)ORM水平 - 在联想使用cascade={"remove"} - 这是在做UnitOfWork,不会影响数据库结构的计算。当你删除一个对象时,UnitOfWork将迭代关联中的所有对象并将其删除。

2)数据库级 - 使用onDelete="CASCADE"对联想的joinColumn - 这将在数据库中添加ON DELETE CASCADE外键列:


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

0

不,我想,当我删除它删除老师用户,当我删除主题是删除老师以及