2017-03-19 3 views
0

私のモデルが更新されるとイベントがトリガされた上:laravelは(更新のためのイベントを無効化)モデル

protected $events = [ 
    'updated' => ZoneUpdated::class, 
]; 

トリガーされるイベントリスナーは、あまりにもモデルに作成します。

public function handle(ZoneUpdated $event) 
{ 
    Zone::find($event->zone->id)->update([ 
     'updated' => true, 
     'valid' => 'u', 
    ]); 
} 

新しいイベントを発生させるためにどのようにリスナーを無効にすることができますか?これは、無限ループを生成する瞬間です。

答えて

2

それでもモデル更新イベントを追跡する必要があり、まだそのモデルを更新し続ける場合は、無限ループを停止する必要が流暢な使い方流暢

public function handle(ZoneUpdated $event) 
{ 
    // assuming table name for Zone Model is "zones" and primary key is "id" 
    \DB::table('zones') 
     ->where('id', $event->zone->id) 
     ->update([ 
      'updated' => true, 
      'valid' => 'u', 
     ]); 
} 

使用してリスナーにしてモデルを更新しようとすることができますモデルオブジェクトに基づいて更新を実行するのではなく、Fluentを介してデータベースに直接更新を実行するためです。

これまでに、イベントリスナーをどのように使用しているのか、本当に必要なものなのか再考するようお願いします。

+0

私は_としてこれを理解することができます」モデルイベントトリガーの手間を省くためにDB呼び出しから直接更新する "_? –

0

あり、一定の条件の確認イベントだけ火を作る方法がありますが、私はこれを回避するための簡単な方法ではなくupdateupdatingイベントを使用することです見つける:

protected $events = [ 
    'updating' => ZoneUpdated::class, 
]; 
関連する問題