thinkphp6 模型事件

180 阅读1分钟

模型事件

模型事件是指在进行模型的查询和写入操作的时候触发的操作行为。

模型事件只在调用模型的方法生效,使用查询构造器操作是无效的。

image.png

模型事件定义

<?php
namespace app\model;

use think\Model;
class Users extends Model
{
    public static function onAfterRead($user) {
        dump('查询后');
    }
    public static function onBeforeInsert($user) {
        dump('新增前');
    }
}

模型事件观察者

如果希望模型的事件单独管理,可以给模型注册一个事件观察者,例如:

<?php

namespace app\index\model;

use think\Model;

class  User  extends Model
{
    protected $observerClass =  app\index\observer\User;
}

User观察者类定义如下:


<?php

namespace app\index\observer;

use app\index\model\Profile;

class User
{
    public function onBeforeUpdate($user)
    {
       if('thinkphp'  ==  $user->name) {
        return false;
        }
    }    

}

观察者类的事件响应方法的第一个参数就是模型对象实例,你依然可以通过依赖注入传入其它的对象参数。

数据库事件

1、执行增删改查的时候,可以触发一些事件来执行额外的操作
2、这些额外的事件可以部署在构造方法里等待激活执行
3、数据库事件执行方法为Db::event(‘事件名’,‘执行函数’),具体事件名如下

image.png

4、数据库事件只正常find、select、update、delete、insert这几个方法
5、在控制器端,事件一般可以写在初始化方法里,方便统一管理

public function initialize()
{
    Db::event('before_select',function ($query)
    {
    echo '执行了批量查询操作';
    });
    Db::event('after_update',function ($query)
    {
    echo '执行了修改操作';
}

查询事件的参数就是当前的查询对象实例。