Php 条令级联:[delete]不调用相关对象的delete()方法
我在我的项目中使用了原则1.2。schema.yml文件包含: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:
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”用于数据库级级联。它完全绕过了教义。谢谢库巴,我一直在寻找它。