我在我的项目中使用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关联的图像文件。
答案 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)
你不是在寻找
onDelete: CASCADE
听起来更像是你想要的选项。