TP5.0 before_insert等模型事件无效?

按照ThinkPHP5.0官方手册提示:

User::event('before_insert', function ($user) {
    if ($user->status != 1) {
       return false;
    }
});

图片描述

手册链接:https://www.kancloud.cn/manua...

我尝试使用TP模型自带的 beforeInsert 方法,做插入前的系列操作,但是没有任何效果,请问各位有成功使用过嘛,或者能给点解决思路或方案.

下面是我的代码

/+------------------------------------
/ 模型User中
/+------------------------------------
// 初始化
protected static function init()
{

    // 方式1
    User::event('before_insert', function ($user) {
        die('check');
    });

    // 方式2
    User::event('before_insert', 'beforeInsert');
    User::event('after_insert', 'afterInsert');

}

// 插入
public function charu($data)
{
    return $this->insert($data);
}

// 插入前
protected static function beforeInsert($callback, $override = false)
{
    echo 'start';exit();
}

/+------------------------------------
/ 控制器中
/+------------------------------------
$res = (new User())->charu($data);

echo "<pre>";
var_dump($res);exit();

执行结果如下

图片描述

直接插入成功了,没有受到前置动作的影响,请问这是为什么呢?

阅读 5.8k
2 个回答

// 插入
public function charu($data)
{

return $this->insert($data);

}

修改为

// 插入
public function charu($data)
{

return $this->data($data)->save();

}
试试?

你直接调用insert()方法是调用了User类的父类Model类,但是Model类没有这个方法,所以执行了里面的__Call方法,指向到了Query类(该类没有绑定你的事件),想要激发User类上的事件,必须要调用Model类中指定的方法进行增删改查才行(save(),delete())这些方法

新手上路,请多包涵

没看模型事件中的相关评论吧?没粗略看代码吧?使用模型中的方法插入,删除数据才会触发这个模型事件,比如save,delete方法。但insert方法是模型中的操作吗?db类中的方法不会触发模型事件

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题