我想在Laravel中进行批量插入,但是执行ModelName::insert($data)
不会触发insert / created事件,因为我相信它使用了Eloquent的构造?
但是我不想遍历数据并单独插入每个数据,这当然会导致多个连接和断开连接,对吗?最好将全部操作作为一个查询来完成?
如何使用模型在一个查询中进行批量插入,以便获得事件?
我当前的批量插入有效,但是没有任何事件:
ResultsText::query()->insert($parsed);
要运行该事件,该事件也可以运行多次,这是我不希望的:
foreach($parsed as $result) {
ResultsText::query()->create($result);
}
下面是我的ResultsText
模型和带有事件的引导方法:
protected static function boot()
{
parent::boot();
static::saving(function ($redirect) {
self::updatePlannerStatus($redirect);
});
static::created(function ($redirect) {
self::updatePlannerStatus($redirect);
});
static::deleted(function ($redirect) {
self::updatePlannerStatus($redirect);
});
}
private static function updatePlannerStatus($redirect)
{
PlannerStatus::status('results-text', $redirect->website_id, 1);
}
注意:我要向数据库中添加27行,执行循环将导致事件触发27次,该事件还会执行2个查询,因此将导致运行81个查询,而不是3个。>