1. 查询事件

数据库的CURD操作支持事件,包括:

事件 描述
before_select select查询前回调
before_find find查询前回调
after_insert insert操作成功后回调
after_update update操作成功后回调
after_delete delete操作成功后回调

查询事件仅支持findselectinsertupdatedelete方法。


2. 注册事件

使用下面的方法注册数据库查询事件

  1. Db::event('after_insert', 'callback');
  2. Db::event('before_select', function ($query) {
  3. // 事件处理
  4. return $result;
  5. });

查询事件的方法参数只有一个:当前的查询对象。但你可以通过依赖注入的方式添加额外的参数。


3. 使用实例

例子实例如下:

  1. <?php
  2. namespace app\database\controller;
  3. use think\Controller;
  4. use think\Db;
  5. use think\db\Query;
  6. class QueryEvent extends Controller
  7. {
  8. protected function initialize()
  9. {
  10. // parent::initialize();
  11. // 注册查询一批记录的前置操作
  12. Query::event('before_select', function ($query) {
  13. // 进行事件处理... ...
  14. // 完成事件处理
  15. echo '完成 select() 查询前置操作 <br/>';
  16. });
  17. // 注册查询一条记录的前置操作
  18. Query::event('before_select', function () {
  19. echo '完成 find() 查询前置操作 <br/>';
  20. });
  21. // 注册删除后置事件
  22. Query::event('after_delete', function () {
  23. echo '完成 delete() 查询前置操作 <br/>';
  24. });
  25. // 注册添加后置操作
  26. Query::event('after_insert', function () {
  27. echo '完成 insert() 查询前置操作 <br/>';
  28. });
  29. // 注册修改后置操作
  30. Query::event('after_update', function () {
  31. echo '完成 update() 查询前置操作 <br/>';
  32. });
  33. }
  34. // 查询 select
  35. public function select()
  36. {
  37. $data = Db::table('wh_record')
  38. ->where([
  39. ['IDX', '>', 150000],
  40. ['UNIT', '=', 2],
  41. ['STATUS', 'IN', ['归还', '借出']],
  42. ])
  43. ->field('IDX AS ID, BUILD AS 阶段, ISN AS 序列号, STATUS AS 状态')
  44. ->order([
  45. 'IDX' => 'DESC',
  46. 'UNIT' => 'ASC'
  47. ])
  48. ->page(1, 10)
  49. ->select();
  50. return json($data);
  51. }
  52. // 查询单个记录的操作
  53. public function find()
  54. {
  55. $IDX = 88888;
  56. $data = Db::table('wh_record')
  57. ->where([
  58. ['IDX', '=', $IDX]
  59. ])
  60. ->field([
  61. 'IDX' => 'ID',
  62. 'BUILD' => 'Build',
  63. 'CONCAT(ISN, "-", UNIT)' => 'No',
  64. ])
  65. ->findOrEmpty();
  66. return json($data);
  67. }
  68. // insert
  69. public function insert()
  70. {
  71. }
  72. // update
  73. public function update()
  74. {
  75. }
  76. // delete
  77. public function delete()
  78. {
  79. }
  80. }