Thinkphp5 或 TP5 删除事件不起作用 before_delete after_delete

Thinkphp当中的模型事件在处理缓存方面使用起来是非常方便的,比如

1.在更新和添加的时候将缓存删除

2.在删除数据的时候将缓存删除


在事件当中写入后,就避免了在每个控制器当中再分别写了,在升级到5.0+以后出现的问题是,

protected static function init(){
    self::beforeWrite(function ($user) {
        //这里有作用
        cache('menu', NULL);
    });
    self::afterDelete(function ($user) {
        //这里不起作用
        cache('menu', NULL);
    });
}

查询数据库,数据也是正常删除的,可是事件就是不起作用,删除也是实例化模型后删除的,如下:

$del_result = $this->menu_model->where('id',$id)->delete();

在尝试多次,准备放弃的时候,突然在手册上看到了这么一句话,如下:

//或者通过数据库类的查询条件删除

User::where('id','>',10)->delete();

也就是说,这种我们熟悉的3.0删除的方式是通过数据库类的方式来进行删除,而非模型的方式,在事件提示当中,有这么一句话,如下:

//模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的

将原有的删除方式更改为:

$del_result = $this->menu_model->destroy($id);

事件正常触发

你可能感兴趣的:(PHP)