2013-02-25 342 views
1

刪除實體爲簡單起見,假設我有兩個對象有一個一對多的關係:從另一個實體

用戶 - (1:N) - >請求

與用戶定義爲

class User { 
... 
/** @OneToMany(targetEntity="Request", mappedBy="user", cascade={"all"}) */ 
    private $request; 
... 
} 

和請求定義爲

class Request { 
... 
/** @ManyToOne(targetEntity="User", inversedBy="request", cascade={"persist"}) */ 
    private $user; 
... 
} 

是否可以創建一個方法來從用戶實體中刪除與用戶相關的所有請求?

我需要的是這樣的:

class User { 
.... 
    public function removeAllMyRequests() { 
     foreach ($this->getAllMyRequests() as $req) 
      $this->em->remove($req); 
    } 
.... 
} 

但顯然我不應該從實體中調用實體管理器。

回答

0

您可以"Orphan Removal"紀念協會:

/** 
* @Entity 
*/ 
class User 
{ 
    /** 
    * @OneToMany(
    * targetEntity="Request", 
    * mappedBy="user", 
    * cascade={"all"}, 
    * orphanRemoval=true 
    *) 
    */ 
    private $requests; 
} 

User#requests集合中刪除任何Request對象將被標記爲刪除時撥打下一個EntityManager#flush()

要同時刪除所有項目,你可以簡單地使用Doctrine\Common\Collections\Collection#clear()

public function removeAllMyRequests() { 
    $this->requests->clear(); 
} 
+0

這是**完全**我需要:)謝謝! – koniszcze 2013-02-26 08:45:43

0
+0

我想簡單級聯是不夠的。兩個實體已經支持級聯(cascade ='persist',cascade ='all')。我**沒有從User類訪問**實體管理器,所以我不能使用$ em-> remove()或$ em-> persist()方法。 – koniszcze 2013-02-25 12:28:29

+0

對不起,我的壞,我讀得快... – mimipc 2013-02-25 12:34:21

相關問題