Symfony2 - 数据库级别删除级联不会触发生命周期事件



我有两个实体(针对这个问题简化):文件夹:

class Folder {
    /**
     * @var ArrayCollection
     * @ORMOneToMany(targetEntity="File",mappedBy="folder")
     **/
    private $files;
}

文件:

class File {
    /**
     * @var Folder
     * @ORMManyToOne(targetEntity="Folder",inversedBy="files")
     * @ORMJoinColumn(onDelete="CASCADE")
     **/
    private $folder;
}

我使用数据库级级联来管理实体级联。

我制作了一个事件侦听器,当删除«文件»时触发(为了删除与实体«文件»相关的MongoDB文档)

这里的事件侦听器:

class MysqlMongoDBIntegrity{
    /**
     * @var DocumentManager
      */
     private $_odm;
     /**
      * @var EntityManager
      */
    private $_em;
    /**
     * @param ContainerInterface
     */
    public function setODMManager(DocumentManager $manager)
    {
        $this->_odm = $manager;
    }
    public function preRemove(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();
        $this->_em = $args->getEntityManager();
        if ($entity instanceof File) {
            /** @var MongoDocumentRepository $mongoRepo */
            $mongoRepo = $this->_odm->getRepository('MYBundle:MongoDocument');
            $mongoRepo->removeMongoDocument($entity->getMongoDocumentId());
        }
    }
}

当直接删除«文件»实体时,事件按预期触发。但是,当删除«文件夹»实体时,指定为数据库级别的级联不会触发事件。

在不更改@JoinColumn中的级联的情况下,有什么方法可以触发此事件吗?

我知道将级联委托给Doctrine(cascade={"remove"})会更好地触发事件,但是否可以在不替换@Join注释中的级联的情况下做到这一点?

这里解释的很正常:在doctrine2中,无论使用ORM还是ODM,数据库级别配置的级联都不会引发生命周期事件。因此,如果不替换@Join annotations 中的级联,这是不可能的

相关内容

  • 没有找到相关文章

最新更新