Laravel的播种机在我的模型上运行各种模型事件,这些事件触发来自Product::saved()
模型事件的新订单通知电子邮件。
这会显著降低数据库播种速度。是否有可能检测种子是否正在运行,如果是这样,告诉Laravel不运行模型事件?
在Model
类中有一些函数允许您忽略事件。
在使用模型播种之前,您需要做这样的事情…
YourModel::flushEventListeners();
我建议将本例中的Dispatcher从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 ...
}
}