2017-08-15 4 views
0

私は私のモデルインスタンスを更新したり、このような新しいものを挿入しています:Laravel雄弁イベントの実装

$model = Model::updateOrCreate([id' => $request['id']], 
$model_to_update_array); 

を私は(既存のモデルインスタンス(「観光」)はを更新された場合にのみ、いくつかのコードを実行したいと新しいものが作成されたときや何も変わらないとき)。

私は雄弁イベントに関するhttps://laravel.com/docs/5.4/eloquent#eventsを読んで、私がイベントを更新更新を使用する必要があるように私には思えます。私はこれらのイベントがLaravelに組み込まれていることを理解しているので、ここからたくさんのものを使う必要はありません。https://laravel.com/docs/5.4/events

私はEloquentイベントを実装する方法を示すチュートリアルは見つかりませんでした。私はイベントの概念にはまったく新しいので、使用方法を理解することは難しいです。誰でもEloquentイベント(一般的なイベントではなく、特にEloqeuntイベント)に関する良いチュートリアルへのリンクを削除できますか、それともここで簡単に説明できますか?

ありがとうございます!

答えて

1

特定のモデルのために雄弁イベントを追加する最も簡単な方法は、そのboot()方法上書きすることです:あなたは、あなたのモデルでこれを置くとき

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

    static::updating(function ($model) { 

    }); 
} 

匿名関数は、モデルが更新されるたびに実行されます。コードを実行するタイミングに応じて、static::updating()static::updated()を呼び出す間に違いがあることに注意してください。 @TheFallenはStackOverflowの上の別のスレッドでは、この問題に対する素晴らしい答えを与えた

+0

は、TheFallen、ありがとうございました。違い(更新、更新)についてはどこで読むことができますか? –

+0

@SergejFomin、ドキュメンテーションはそれについてはあまり言及していませんが、基本的に '* ing'イベントは実際のイベントの前に呼び出され、' * ed'はイベントの後に呼び出されます。したがって、あなたのコードを 'static :: updating()'に置くと、それは実際のデータベースの更新より前に実行され、 'static :: updated()'ではそれが実行されます。 – TheFallen

+0

こんにちは!そこで私のモデルには、保護された静的関数boot()が含まれていました。コントローラでモデルが更新されたかどうかを確認するにはどうすればよいですか? –