2016-12-23 31 views
3

メリークリスマスの男!laravel Eloquentモデルの更新イベントが発生しない

私はLaravelを初めて利用しています。ちょうど私がサービスプロバイダとモデルイベントを使用して更新情報を記録しようとすると、初心者の質問がありました。

は、オンラインドキュメント以下の通りであった:一緒に入れた後https://laravel.com/docs/5.3/eloquent#events

すべてのコードを、私はモデルのイベントのみが使用を作成するときに火災が、私は、ユーザーを編集するとき何をログに記録したことがないことがわかります。

私は何かを見逃しましたか? $ユーザーが正しく割り当てられていないように感じる。これ、どこから来たの?他のサービスプロバイダから?

説明やヒントがあれば幸いです!

<?php 

namespace App\Providers; 

use App\User; 
use Illuminate\Support\ServiceProvider; 

class AppServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     User::creating(function ($user) { 
      Log::info('event creating'); 
     }); 

     User::created(function ($user) { 
      Log::info('event created'); 
     }); 

     User::updating(function ($user) { 
      Log::info('event updating'); 
     }); 

     User::updated(function ($user) { 
      Log::info('event updated'); 
     }); 

     User::saving(function ($user) { 
      Log::info('event saving'); 
     }); 

     User::saved(function ($user) { 
      Log::info('event saved'); 
     }); 

     User::deleting(function ($user) { 
      Log::info('event deleting'); 
     }); 

     User::deleted(function ($user) { 
      Log::info('event deleted'); 
     }); 
    } 

    /** 
    * Register the service provider. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 
+0

'create'と' edit'を行い、あなたのコードは何ですか?したがって、イベントが発生しなかったか、イベントを開始していない一括更新を行っているため、変更が行われなかった可能性があります。 –

+0

ありがとう@LionelChan、OhgodwhyとEric Tucker! User :: find($ id) - > update(['username' => $ newUsername]);を更新すると、イベントトリガは完全に動作しています。あなたの助けに感謝! – northblue

+0

同じことは 'delete'に行きます。モデルは、モデルオブジェクトが作成されている場合のみ、関連するイベントを発生させます。つまり、オブジェクトを取得するために 'find'、' get'、 'first'を最初に実行した場合にのみ起動します: –

答えて

5

イベントを発生させるには、データベースからユーザーを取得し、そのユーザーを保存する必要があります。たとえば:

これは、更新イベントを発生しません:

User::where('id', $id)->update(['username' => $newUsername]); 

これは、更新イベントを発生します:

User::find($id)->update(['username' => $newUsername]); 
2

考えられる理由:

  1. 行が全く更新されない - 変更なし。したがって、発砲しないでください。

  2. updateを使用しました。ここにドキュメントをチェック:https://laravel.com/docs/5.3/eloquent#updates

雄弁経由で一括更新を発行し、保存し、更新されたモデルのイベントが更新されたモデルのために解雇されることはありません。これは、一括更新を発行するときにモデルが実際には検索されないためです。

+0

短く; 'find($ id)'を発行し、これが正しく動作するようにプロパティを手動で変更する必要があります。 – Ohgodwhy

関連する問題