Можно ли предотвратить запуск 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 ...
}
}