级联删除,每一个都删除

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,但两者看起来有点不同我的目的。


我该如何解决?


慕哥9229398
浏览 136回答 1
1回答

BIG阳

我可以看到对于您设置的两个 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}
打开App,查看更多内容
随时随地看视频慕课网APP