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

事件正常触发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值