doctrine post删除symfony中删除级联的监听器

时间:2017-04-12 21:39:37

标签: symfony doctrine

我的实体File位于oneToMany关系的拥有方,Document位于反面。有级联删除,因此删除Document时,所有相关的File实体也会被删除。

现在我有一个实体监听器,postRemove()方法File。但是,当我直接删除实体时,事件才被触发,而不是通过级联删除完成。

是否有解决方案来触发带有级联删除的postRemove事件?

一个解决方案是将postRemove事件也放到Document中,但这不会很干净,因为文档不应该关心File postRemove的东西。 或者我可以通过Document中的postRemove替换级联删除,逐个删除File实体。但我想保留目前的级联。

那么,有没有办法在级联中触发事件?

这是我目前的事件代码:

File.orm.yml

AppBundle\Entity\File:
    type: entity
    entityListeners:
        AppBundle\EventListener\FileListener:
            postRemove: [postRemove]

听众类

class FileListener {

    public function postRemove(File $file) {

        dump($file); die();           
    }
}

service.yml

file_listener:
        class: AppBundle\EventListener\FileListener
        arguments: ['%path_image%', '%path_thumb%', '%path_preview%']
        tags:
            - { name: doctrine.orm.entity_listener }
            - { name: doctrine.orm.entity_listener, entity_manager: custom }

1 个答案:

答案 0 :(得分:0)

好的,我解决了onDelete: cascade替换cascade: [remove]。但cascade: [remove]需要在反面!所以不是在文件中而是在文档中。

这个解决方案的缺点是,级联操作不是由数据库完成的,而是由学说本身完成的,这意味着内存负载很重。它只适用于我的结构,只有一个小集合,但对于大型团体应该考虑到。