Doctrine cascade:[delete]不调用相关对象的delete()方法

时间:2010-07-13 10:12:59

标签: php doctrine

我在我的项目中使用Doctrine 1.2。 schema.yml文件包含:

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()方法并在其中放置了一些调试代码,但是在调用Campaign :: delete()时它不会被执行。

不是级联:[删除]意味着这个原因吗?我不想使用数据库级别级联,因为删除记录时必须删除与CampaignImage关联的图像文件。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我以另一种方式解决了

你在这个

的Campaign类中

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

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

它确实对我有用

答案 2 :(得分:-2)