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);
事件正常触发