1. 查询事件
数据库的CURD操作支持事件,包括:
| 事件 | 描述 |
|---|---|
| before_select | select查询前回调 |
| before_find | find查询前回调 |
| after_insert | insert操作成功后回调 |
| after_update | update操作成功后回调 |
| after_delete | delete操作成功后回调 |
查询事件仅支持find、select、insert、update和delete方法。
2. 注册事件
使用下面的方法注册数据库查询事件
Db::event('after_insert', 'callback');Db::event('before_select', function ($query) {// 事件处理return $result;});
查询事件的方法参数只有一个:当前的查询对象。但你可以通过依赖注入的方式添加额外的参数。
3. 使用实例
例子实例如下:
<?phpnamespace app\database\controller;use think\Controller;use think\Db;use think\db\Query;class QueryEvent extends Controller{protected function initialize(){// parent::initialize();// 注册查询一批记录的前置操作Query::event('before_select', function ($query) {// 进行事件处理... ...// 完成事件处理echo '完成 select() 查询前置操作 <br/>';});// 注册查询一条记录的前置操作Query::event('before_select', function () {echo '完成 find() 查询前置操作 <br/>';});// 注册删除后置事件Query::event('after_delete', function () {echo '完成 delete() 查询前置操作 <br/>';});// 注册添加后置操作Query::event('after_insert', function () {echo '完成 insert() 查询前置操作 <br/>';});// 注册修改后置操作Query::event('after_update', function () {echo '完成 update() 查询前置操作 <br/>';});}// 查询 selectpublic function select(){$data = Db::table('wh_record')->where([['IDX', '>', 150000],['UNIT', '=', 2],['STATUS', 'IN', ['归还', '借出']],])->field('IDX AS ID, BUILD AS 阶段, ISN AS 序列号, STATUS AS 状态')->order(['IDX' => 'DESC','UNIT' => 'ASC'])->page(1, 10)->select();return json($data);}// 查询单个记录的操作public function find(){$IDX = 88888;$data = Db::table('wh_record')->where([['IDX', '=', $IDX]])->field(['IDX' => 'ID','BUILD' => 'Build','CONCAT(ISN, "-", UNIT)' => 'No',])->findOrEmpty();return json($data);}// insertpublic function insert(){}// updatepublic function update(){}// deletepublic function delete(){}}
