为了账号安全,请及时绑定邮箱和手机立即绑定

级联删除,每一个都删除

级联删除,每一个都删除

PHP
慕哥9229398 2022-01-24 10:23:34
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


}


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信