我的实体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 }
答案 0 :(得分:0)
好的,我解决了onDelete: cascade
替换cascade: [remove]
。但cascade: [remove]
需要在反面!所以不是在文件中而是在文档中。
这个解决方案的缺点是,级联操作不是由数据库完成的,而是由学说本身完成的,这意味着内存负载很重。它只适用于我的结构,只有一个小集合,但对于大型团体应该考虑到。