2015-04-02 115 views
0

我在「拯救」模型事件下面的代碼:是否可以暫時禁用Laravel中的事件?

Session::flash('info', 'Data has been saved.')` 

所以每次模型保存我能有一個閃光的消息通知用戶。問題是,有時我只需要更新一個字段,如「狀態」或增加一個「計數器」,我不需要一個閃光消息。那麼,是否有可能暫時禁用觸發模型事件?或者是否有像$model->save()這樣的不會觸發'保存'事件的Eloquent方法?

回答

2

你不應該將會話閃爍與模型事件混合在一起 - 當事情發生時通知會話不是模型的責任。

控制器在保存模型時調用會話閃存會更好。

通過這種方式,您可以控制何時實際顯示消息 - 從而解決您的問題。

+1

謝謝FO你的答案。起初,我認爲它可以自動化閃光消息,所以我不需要重複將它放在控制器中,至於模型的責任,我認爲不是通知會話的模型,模型只是觸發事件,它不知道事件的聽衆在做什麼,是嗎?但無論如何,我認爲最好把它放在控制器中,正如你所說的那樣,因爲似乎沒有辦法避免這個問題。 – codebug 2015-04-03 02:21:15

1

要回答的人誰在這裏結束了尋找解決方案的問題,你可以在一個實例禁用模型偵聽與unsetEventDispatcher()方法:

$flight = App\Flight::create(['name' => 'Flight 10']); 
$flight->unsetEventDispatcher(); 
$flight->save(); // Listeners won't be triggered 
+0

創建和創建的事件不會觸發第一行? – BlackBurn027 2017-05-27 07:39:18

+1

你說得很好,然而,就我而言,我有興趣抑制「保存」事件被觸發,而這是做這項工作的。 – 2017-05-27 18:54:42

+0

我猜對了:) – BlackBurn027 2017-05-30 07:34:27

1

調用模型對象,然後調用unsetEventDispatcher 之後,你可以做任何你想要的,無需擔心事件觸發

像這樣的:

$IncidentModel = new Incident; 
    $IncidentModel->unsetEventDispatcher(); 

    $incident = $IncidentModel->create($data);