Php 条令级联:[delete]不调用相关对象的delete()方法

Php 条令级联:[delete]不调用相关对象的delete()方法,php,doctrine,Php,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:

我在我的项目中使用了原则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()时不会执行该方法


cascade:[delete]的意思不正是出于这个原因吗?我不想使用数据库级级联,因为在删除记录时必须删除与活动图像关联的图像文件。

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

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

您不需要

 onDelete: CASCADE
这听起来更像是你想要的选择


我用另一种方法解决了这个问题

在竞选课上你把这个

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

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

它确实对我有用,因为“onDelete:CASCADE”用于数据库级级联。它完全绕过了教义。谢谢库巴,我一直在寻找它。