当数据库被播种时,是不是可以阻止 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 5 中的 --force 进行生产时,数据库卡在使用播种机迁移
有人在 Laravel 播种的 Algolia 上遇到过这种情况吗?
Laravel 7 Passport:被 CORS 策略阻止