学说级联:[delete]不调用相关对象的delete()方法

问题描述:

我在我的项目中使用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关联的图像文件。

级联删除不运行delete()方法。但是,它保证了钩子运行。

如果您需要实现任何先/后删除逻辑,您不应该覆盖delete()方法,而应该使用preDelete()或postDelete()挂钩。

+0

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

+0

“onDelete:CASCADE”用于数据库级联级联。它完全绕过了教条。 – 2010-07-14 06:47:03

我已经以另一种方式解决

在运动类

你把这个

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

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

它为我做的工作,这样