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;
}

触发器更快,并且擅长执行引用完整性,这就是我选择它们的原因。