【发布时间】:2020-09-23 17:40:01
【问题描述】:
我正在尝试使用 csv 插入用户。 我的模型在“创建”事件上有一个观察者。
但是,由于我的函数中的代码创建了事件(我已修复),在一些 $users->save() 之后我可能会遇到错误。
created 事件中的代码向用户发送电子邮件。问题是如果代码在 5 次迭代后崩溃,我发送了 5 封电子邮件,但我的数据库中没有用户。
我想知道 Eloquent 是否在您多次调用 save() 时使用事务? 如果是,如何强制 Eloquent 在每次创建事件结束后真正保存我的对象?
可能是我对事件有误解,因为如果您不确定将模型插入数据库,我看不出使用此事件的意义。
【问题讨论】:
-
您可能希望在单独的步骤中进行保存和电子邮件发送。一个事务,如果包装对
->save()的多个调用,如果其中任何一个失败(并且您已配置代码来处理),将阻止其中任何一个保存。不过,在这种情况下,您可能无法使用观察者。 -
感谢您的回复,但我不明白为什么 Eloquent 似乎使用事务。我不是这个项目的原始所有者,所以也许我遗漏了一些雄辩的配置或文档。
-
哦,我明白了!默认情况下,Laravel 和 Eloquent 不使用事务;如果您有一系列对
->save()的调用,它们将一个一个地被持久化。检查您的代码是否有任何对DB::beginTransaction()的调用,因为这就是您通常的设置方式。
标签: laravel events eloquent batch-insert