2015-04-02 113 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);