在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/PHP/ TP5.0 before_insert等模型事件無(wú)效?

TP5.0 before_insert等模型事件無(wú)效?

按照ThinkPHP5.0官方手冊(cè)提示:

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

圖片描述

手冊(cè)鏈接:https://www.kancloud.cn/manua...

我嘗試使用TP模型自帶的 beforeInsert 方法,做插入前的系列操作,但是沒(méi)有任何效果,請(qǐng)問(wèn)各位有成功使用過(guò)嘛,或者能給點(diǎn)解決思路或方案.

下面是我的代碼

/+------------------------------------
/ 模型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();

執(zhí)行結(jié)果如下

圖片描述

直接插入成功了,沒(méi)有受到前置動(dòng)作的影響,請(qǐng)問(wèn)這是為什么呢?

回答
編輯回答
念初

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

return $this->insert($data);

}

修改為

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

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

}
試試?

你直接調(diào)用insert()方法是調(diào)用了User類(lèi)的父類(lèi)Model類(lèi),但是Model類(lèi)沒(méi)有這個(gè)方法,所以執(zhí)行了里面的__Call方法,指向到了Query類(lèi)(該類(lèi)沒(méi)有綁定你的事件),想要激發(fā)User類(lèi)上的事件,必須要調(diào)用Model類(lèi)中指定的方法進(jìn)行增刪改查才行(save(),delete())這些方法

2018年9月17日 02:08
編輯回答
巫婆

沒(méi)看模型事件中的相關(guān)評(píng)論吧?沒(méi)粗略看代碼吧?使用模型中的方法插入,刪除數(shù)據(jù)才會(huì)觸發(fā)這個(gè)模型事件,比如save,delete方法。但insert方法是模型中的操作嗎?db類(lèi)中的方法不會(huì)觸發(fā)模型事件

2017年6月6日 02:34