我的数据库使用了 MyISAM 引擎,因此我无法调用级联删除操作,因为 MyISAM 不支持它。同时,我想在我的yii2应用程序中删除相关记录。我怎么能这样做?
答案 0 :(得分:2)
有几种方法可以解决这个问题。
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;
}
触发器更快,并且善于强制引用完整性,这就是我选择它们的原因。
答案 1 :(得分:1)
注意:以下解决方案仅在您使用ActiveRecord delete method时有效。
您可以使用beforeDelete方法删除相关记录 - 在这种情况下,您只需编写一次代码,并在每次调用$model->delete()
时执行。
或者您可以向EVENT_BEFORE_DELETE事件添加处理程序。