2016-05-11 6 views
1

Eloquentモデルイベントを使用することに関して、私は特定のイベント(共通イベント)との重複がある場合、モデルイベントがメソッド呼び出しにどのように応答するのか、もしあれば、そのようなイベントのコードを書き込む方法を考えていましたか?例えばEloquentモデルイベントは、作成時に両方とも呼び出され、保存され、作成されますか?

、私はsave()メソッドがas shown in the docsと呼ばれるcreate()を呼び出すときに、舞台裏で、理解し、私は私が上create()を呼んでいるモデル、すなわちModel::create($array)を持っている場合:

/** 
* Save a new model and return the instance. 
* 
* @param array $attributes 
* @return static 
*/ 
public static function create(array $attributes = []) 
{ 
    $model = new static($attributes); 
    $model->save(); 
    return $model; 
} 

だから、これを維持します私がsaved()created()というイベントで同じようにしたいのであれば、saved()イベントのイベントを作成してcreate()というイベントが発生するのを心配する必要はありません。 save()メソッドのラッパー(上記参照)。だから、私はこれを行うことができます:

public static function boot() 
{ 
    parent::boot(); 

    // covers created and saved events, as create() method triggers save() 
    static::saved(function($model) { 
     // do xyz 
    }); 
} 

また、私は両方のイベントを聞くために2つの別個のメソッドを作成する必要がありますか?このように:(共通をモデルイベントは、メソッドに対応するにはどうすればよい

  • 呼び出し

  • は、特定のイベントを持つ任意の重複がある:

    public static function boot() 
    { 
        parent::boot(); 
    
        static::created(function($model) { 
         // do xyz 
        }); 
    
        static::saved(function($model) { 
         // do xyz 
        }); 
    } 
    

    だから、私は冒頭で述べた質問を繰り返します実際にそのようなイベント

ためのコードを書く接近する方法イベント、上述したように)
  • がある場合、

    このプロセスを理解する上でのガイダンスは感謝します。

  • 答えて

    3

    モデルの周囲に3つのイベントがデータベースに保存されています。これらはcreated,updatedおよびsavedです。

    createdモデルを初めて保存するときに呼び出されます。

    updatedは、後でモデルを保存するときに呼び出されます。

    savedは、モデルの保存時(最初に作成されたときを含む)に呼び出されます。

    したがってsavedはキャッチオールです。

    さらに、モデルが作成されたばかりのときには、wasRecentlyCreatedプロパティがtrueに設定されています。

    したがって、savedというイベントがある場合でも、そのプロパティを確認することで、作成と更新の違いを処理できます。

    コードをどのように扱うかについては、あなたの話になります。

    個人的に、モデルが作成されたときに必要なコードがあれば、そのメソッドを使用します。同様に更新された。

    モデルが保存されるたびに発生する必要のある共有コードを作成したが、作成時に特別なものがさらに必要な場合は、別のcreatedイベントを作成しません。savedを使用してチェックしますwasRecentlyCreated

    +0

    私は$ this-> wasRecentlyCreated for static :: savedをチェックするはずです。なぜ彼らは普通の人のように作成/保存されたイベントを持っていないのでしょうか? –

    +0

    @alextoader 'saved'メソッドは、最初の引数として保存されたモデルを渡すので、' wasRecentlyCreated'をチェックしてください。 –

    関連する問題