当数据库被播种时,是不是可以阻止 Laravel 运行模型事件?

Posted

技术标签:

【中文标题】当数据库被播种时,是不是可以阻止 Laravel 运行模型事件?【英文标题】:Is it possible to prevent Laravel running Model Events when the database is being Seeded?当数据库被播种时,是否可以阻止 Laravel 运行模型事件? 【发布时间】:2015-08-10 02:46:06 【问题描述】:

Laravel 的播种器在我的模型上运行各种模型事件,这些事件会触发来自 Product::saved() 模型事件的新订单通知电子邮件等。

这会显着减慢数据库播种速度。是否可以检测种子是否正在运行,如果是,告诉 Laravel 不要运行模型事件?

【问题讨论】:

【参考方案1】:

Model 类中有一些函数可以让您忽略事件。

在使用模型播种之前,您需要执行以下操作...

YourModel::flushEventListeners();

【讨论】:

这似乎不适用于自定义事件。另一种解决方案:``` // Remove Dispatcher Model::unsetEventDispatcher() ``` 在这种情况下似乎可以工作。 这行得通(laravel 8)。我把它放在播种机的顶部->运行【参考方案2】:

我建议从 Eloquent 模型中删除本案例中的 Dispatcher。

例如。

// Check Dispatcher
Model::getEventDispatcher()

// Remove Dispatcher
Model::unsetEventDispatcher()

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

【讨论】:

以上是关于当数据库被播种时,是不是可以阻止 Laravel 运行模型事件?的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 中播种时的质量分配错误

使用 Laravel 5 中的 --force 进行生产时,数据库卡在使用播种机迁移

有人在 Laravel 播种的 Algolia 上遇到过这种情况吗?

Laravel 7 Passport:被 CORS 策略阻止

为啥 Laravel PHPUnit 内存测试会播种我的主数据库?

Laravel - 播种大型 SQL 文件