从其他实体中删除实体

时间:2013-02-25 11:36:08

标签: php orm doctrine-orm doctrine entitymanager

为了简单起见,假设我有两个具有一对多关系的对象:

  

用户 - (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);
    }
....
}

但显然我不应该从实体内部调用实体经理。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以使用"Orphan Removal"标记关联:

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

Request集合中移除的所有User#requests对象都会在下一次EntityManager#flush()来电时标记为已删除。

要一次删除所有项目,只需使用Doctrine\Common\Collections\Collection#clear()

即可
public function removeAllMyRequests() {
    $this->requests->clear();
}