为了简单起见,假设我有两个具有一对多关系的对象:
用户 - (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 :(得分:0)
我认为您正在寻找“级联”选项:http://docs.doctrine-project.org/en/2.0.x/reference/working-with-associations.html#transitive-persistence-cascade-operations
答案 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();
}