yii2中删除相关记录——最佳实践
Delete related records in yii2 - best practices
我的数据库在后台使用 MyISAM 引擎,所以我无法调用级联删除操作,因为 MyISAM 没有支持它。同时,我想删除我的yii2应用程序中的相关记录。我该怎么做?
注意: 以下解决方案仅在您使用 ActiveRecord delete method.
时有效
您可以使用 beforeDelete 方法并在那里删除相关记录 - 在这种情况下,您只需编写一次代码,每次调用 $model->delete()
.
时都会执行该代码
或者您可以将处理程序添加到 EVENT_BEFORE_DELETE 事件。
有几种方法可以解决这个问题。
1) 在数据库端创建一个trigger:
CREATE TRIGGER trigger_name
BEFORE DELETE ON table_name FOR EACH ROW
BEGIN
-- variable declarations
-- trigger code
END;
2)删除yii2里面的相关记录beforeDelete函数:
public function beforeDelete() {
if (!parent::beforeDelete()) {
return false;
}
// ... custom code here ...
return true;
}
触发器更快,并且擅长执行引用完整性,这就是我选择它们的原因。
我的数据库在后台使用 MyISAM 引擎,所以我无法调用级联删除操作,因为 MyISAM 没有支持它。同时,我想删除我的yii2应用程序中的相关记录。我该怎么做?
注意: 以下解决方案仅在您使用 ActiveRecord delete method.
时有效您可以使用 beforeDelete 方法并在那里删除相关记录 - 在这种情况下,您只需编写一次代码,每次调用 $model->delete()
.
或者您可以将处理程序添加到 EVENT_BEFORE_DELETE 事件。
有几种方法可以解决这个问题。
1) 在数据库端创建一个trigger:
CREATE TRIGGER trigger_name
BEFORE DELETE ON table_name FOR EACH ROW
BEGIN
-- variable declarations
-- trigger code
END;
2)删除yii2里面的相关记录beforeDelete函数:
public function beforeDelete() {
if (!parent::beforeDelete()) {
return false;
}
// ... custom code here ...
return true;
}
触发器更快,并且擅长执行引用完整性,这就是我选择它们的原因。