2017-04-12 90 views
0

我擁有關係的擁有一方的實體FileDocument位於反轉端。存在級聯刪除,因此當Document被刪除時,所有相關的File實體也被刪除。doctrine post在symfony上刪除級聯刪除監聽器

現在我有一個postRemove()方法的實體監聽器File。但事件只是被解僱,當我直接刪除實體,而不是通過級聯刪除完成。

是否有解決方案觸發級聯刪除postRemove事件?

一個解決方案是將postRemove事件放到Document中,但這不會很乾淨,因爲文檔不應該關心File postRemove的東西。 或者我可以通過文檔中的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

好,我解決了它替換onDelete: cascadecascade: [remove]。但cascade: [remove]需要在倒置的一面!所以不是在文件中,而是在文檔中。

該解決方案的缺點是,級聯操作不是由數據庫完成的,而是由原則本身完成的,這意味着內存負載過重。它適合我的結構只有一個小集合,但應考慮爲更大的團體。