gpt4 book ai didi

symfony - 在 symfony 中删除级联的 Doctrine postRemove 监听器

转载 作者:行者123 更新时间:2023-12-05 06:40:05 26 4
gpt4 key购买 nike

我有一个实体 File,它位于 oneToMany 关系的拥有方,Document 位于相反的一侧。存在级联删除,因此当 Document 被删除时,所有相关的 File 实体也被删除。

现在我有一个实体监听器,它带有 FilepostRemove() 方法。但是事件只会在我直接删除实体时触发,而不是在通过级联删除完成时触发。

是否有解决方案可以通过级联删除来触发 postRemove 事件?

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

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

这是我当前的事件代码:

文件.orm.yml

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

监听类

class FileListener {

public function postRemove(File $file) {

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

服务.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 }

最佳答案

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

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

关于symfony - 在 symfony 中删除级联的 Doctrine postRemove 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43380090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com