Можно ли предотвратить запуск Laravel Model Events во время заполнения базы данных?

Сеялка Laravel запускает на моделях множество событий модели, которые, помимо прочего, вызывают электронные письма с уведомлением о новом заказе из Product::saved() Модельное событие.

Это значительно замедляет заполнение базы данных. Можно ли определить, запускается ли Семя, и если да, сказать Laravel не запускать События модели?

3 ответа

Есть функции на Model класс, который позволит вам игнорировать события.

Прежде чем использовать модель для посева, вам нужно сделать что-то вроде этого...

YourModel::flushEventListeners();

Я рекомендую удалить Диспетчер в этом случае из Eloquent Model.

Например.

// Check Dispatcher
Model::getEventDispatcher()

// Remove Dispatcher
Model::unsetEventDispatcher()

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

ДобавлятьWithoutModelEventsЧерта для вашего сеялки

      namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    use WithoutModelEvents;

    public function run(): void
    {
        // Silent eloquent queries ...
    }
}
Другие вопросы по тегам