雄辩的模型在批量插入中保存了事件

时间:2018-10-18 15:19:05

标签: php laravel eloquent

我想在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个。

0 个答案:

没有答案