2015-11-07 80 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

不,我想,當我刪除它刪除老師用戶,當我刪除主題是刪除老師以及