2010-07-13 45 views
0

我在我的項目中使用Doctrine 1.2。 schema.yml文件包含了:學說級聯:[delete]不調用相關對象的delete()方法

Campaign: 
    tableName: campaign 
    actAs: 
    Timestampable: 
     created: 
     name: created_datetime 
     type: timestamp 
     format: Y-m-d H:i:s 
     updated: 
     disabled: true 
    columns: 
    id: 
     type: integer(9) 
     fixed: false 
     unsigned: false 
     primary: true 
     autoincrement: true 
    ... 
    relations: 
    CampaignImages: 
     local: id 
     foreign: campaign_id 
     type: many 
     cascade: [delete] 
    ... 
CampaignImages: 
    tableName: campaign_images 
    columns: 
    id: 
     type: integer(9) 
     fixed: false 
     unsigned: false 
     primary: true 
     autoincrement: true 
    campaign_id: 
     type: integer(9) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: true 
     autoincrement: false 
    ... 

我已經定義CampaignImages :: delete()方法,並把一些調試代碼存在,但它在運動::刪除沒有得到執行()被調用。

是不是級聯:[刪除]意味着精度爲此原因?我不想使用數據庫級聯級聯,因爲在刪除記錄時必須刪除與CampaignImage關聯的圖像文件。

回答

2

級聯刪除不運行delete()方法。但是,它保證了鉤子運行。

如果您需要實現任何先/後刪除邏輯,您不應該覆蓋delete()方法,而應該使用preDelete()或postDelete()掛鉤。

+0

感謝哭吧,我一直在尋找的只是那。 – fest 2010-07-15 07:58:56

1

我已經以另一種方式解決

在運動類

你把這個

public function setUp() { 
     parent::setUp(); 

     // to delete cascaded items 
     $CampaignRel = $this->_table->getRelation("CampaignImages"); 
     $CampaignRel->offsetSet('cascade', array('delete')); 
    } 

它爲我做的工作,這樣