当数据库被播种时,是不是可以阻止 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 运行模型事件?的主要内容,如果未能解决你的问题,请参考以下文章