class DistCache{ /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\ManyToOne(targetEntity="App\Entity\PlaceInfo") * @ORM\JoinColumn(nullable=false) */ private $placeOne; /** * @ORM\ManyToOne(targetEntity="App\Entity\PlaceInfo") * @ORM\JoinColumn(nullable=false) */ private $placeTwo;该表有两个成员,都与PlaceInfo类有关。并且PlaceInfo类没有任何与DistCache类相关的成员。然后我想 delete the DistCache entry when one of two members(placeOne or placeTwo) is deleted我四处搜索并发现cascade="remove" or orphanRemoval=true,但两者看起来有点不同我的目的。我该如何解决?
1 回答
BIG阳
TA贡献1859条经验 获得超6个赞
我可以看到对于您设置的两个 PlaceInfo 对象nullable=false,因此在删除 PlaceInfo 时,不仅要删除 entityManager 管理的 DistCache 实体,还必须删除数据库中的实体。
我建议您可以使用Doctrine 生命周期回调中的preRemove事件。在 PlaceInfo 记录的删除事件中,您查询所有使用已删除 PlaceInfo 对象的 DistCache 对象并首先删除它们。
简而言之,您需要:
在您的课程之前添加 @ORM\HasLifecycleCallbacks 以启用生命周期。
在 PlaceInfo 类中添加 preRemove 函数:
/**
* @ORM\PreRemove
* @param LifecycleEventArgs $event
*/
public function removeDistCache(LifecycleEventArgs $event)
{
$em = $event->getEntityManager();
// Use $em to query and delete the DistCache entities
}
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消