Laravelのテストでobserverのテストを書いたとき、
observer設定前と設定後の値を比較するためにobserverを一時的に無効にする必要があったのですが、公式マニュアルを読んでもobserverの登録のやり方(Model::observe(ModelObserver::class)
)はありますが無効にするやり方が記載されていなかったので調べました。
環境
名前 | バージョン |
---|---|
PHP | 7.2.6 |
Laravel | 5.5.40 |
やり方
// オブザーバーを無効にする
Model::flushEventListeners();
これだけです。
なお、無効にしたあとに有効にするには
Model::observe(ModelObserver::class)
です。
observer関連のメソッドは、Illuminate\Database\Eloquent\Concerns\HasEvents
に定義されているので、observer関連で困ったらここを参照すると良さそうです。