模型事件
模型事件是指在进行模型的查询和写入操作的时候触发的操作行为。
模型事件只在调用模型的方法生效,使用查询构造器操作是无效的。
模型事件定义
<?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(‘事件名’,‘执行函数’),具体事件名如下
4、数据库事件只正常find、select、update、delete、insert这几个方法
5、在控制器端,事件一般可以写在初始化方法里,方便统一管理
public function initialize()
{
Db::event('before_select',function ($query)
{
echo '执行了批量查询操作';
});
Db::event('after_update',function ($query)
{
echo '执行了修改操作';
}
查询事件的参数就是当前的查询对象实例。