取消事件觸發

Yoger發表於2019-07-22

有時候你的操作可能會觸發別人的事件(也不知道是哪個大佬寫的,我們也不敢亂改)
分享一個取消事件的例子。

//獲取model裡面的事件
$dispatcher = YourModel::getEventDispatcher();

//禁用model裡面的事件
YourModel::unsetEventDispatcher();

// 呼叫model的save方法
$yourInstance->save();

//啟用事件
YourModel::setEventDispatcher($dispatcher);
//Visitor model有saved事件,某些地方某些情況監聽到後做一些其他操作
protected $dispatchesEvents = [
        'saved' => VisitorSavedEvent::class,
    ];
//有時候不需要觸發事件,是可以取消的,可以呼叫model的update方法避開save()或者取消事件(推薦後者)。
// 獲取來訪資訊
        $visitor = Visitor::where('id', $request->visitor_id)->first();
//取消事件觸發
$dispatcher = Visitor::getEventDispatcher();
Visitor::unsetEventDispatcher();
$ret = $visitor->save();
Visitor::setEventDispatcher($dispatcher);

參考連結:

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章