行为模型实例 php,模型实战技巧---Model事件功能的使用

# TP5实战技巧--Model事件功能的使用

## 模型事件

模型事件是指在进行模型的写入操作的时候触发的操作行为,包括模型的save方法和delete方法。

注册的回调方法支持传入一个参数(当前的模型对象实例),并且before_write、before_insert、 before_update 、before_delete事件方法如果返回false,则不会继续执行。

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

>注意:使用模型中的isUpdate()方法也是无效的

### 我个人还是推荐 所有的有关于数据库变更的操作 都要使用模型完成.

| 钩子 | 对应操作 | 快捷注册方法 |

| --- | --- | --- |

| before_insert | 新增前 | beforeInsert |

| after_insert | 新增后 | afterInsert |

| before_update | 更新前 | beforeUpdate |

| after_update | 更新后 | afterUpdate |

| before_write | 写入前 | beforeWrite |

| after_write | 写入后 | afterWrite |

| before_delete | 删除前 | beforeDelete |

| after_delete | 删除后 | afterDelete |

官方给出了两组 事件方法使用实例

方法一:

~~~

namespace app\index\model;

use think\Model;

class User extends Model

{

protected static function init()

{

User::event('before_insert', function ($user) {

if ($user->status != 1) {

return false;

}

});

}

}

~~~

5.04以后的版本 可以使用方法二

~~~

namespace app\index\model;

use think\Model;

class User extends Model

{

protected static function init()

{

User::beforeInsert(function ($user) {

if ($user->status != 1) {

return false;

}

});

}

}

~~~

你可以使用dump功能

查看你操作的对象的详情

也可以使用其他静态方法进行数据操作

~~~

namespace app\index\model;

use think\Model;

class User extends Model

{

protected static function init()

{

User::afterInsert(function ($user) {

//查看详情

dump($user);

//查看新增ID

dump($user->id);

//执行其他静态方法 写入简单的操作记录等等

Dd::("user_log")->insert([$user->id,"注册新用户"]);

});

}

}

~~~

#### 详细使用实例源码 详见进阶篇

模型事件实战应用---数据库操作日志

https://www.kancloud.cn/mikkle/thinkphp5_study/347954

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值