web-dev-qa-db-ja.com

データベースがシードされているときにLaravelモデルイベントが実行されるのを防ぐことは可能ですか?

Laravelのシーダーは、私のモデルでさまざまなモデルイベントを実行し、Product::saved()モデルイベントからの新規注文通知メールをトリガーします。

これにより、データベースのシードが大幅に遅くなります。 a Seedが実行されているかどうかを検出し、実行されている場合は、モデルイベントを実行しないようにLaravelに指示することは可能ですか?

21
Jack

Modelクラスには、イベントを無視できる関数があります。

モデルを使用してシードする前に、次のようなことを行う必要があります...

YourModel::flushEventListeners();
28
user1669496

この場合、Eloquentモデルからディスパッチャーを削除することをお勧めします。

例えば。

// Check Dispatcher
Model::getEventDispatcher()

// Remove Dispatcher
Model::unsetEventDispatcher()

// Add Dispatcher
Model::setEventDispatcher(new \Illuminate\Events\Dispatcher);
21
thisisablock