使用下面的事务,我触发了一个事件,它运行事件下面列出的两个侦听器。问题是,当第一个事件AddQuestionToQuestionsTable由于任何原因失败时,DB数据会因为DB::rollback而正确回滚,但我在第二个侦听器QuestionAddedNotificationSend中设置并触发的早期通知电子邮件会被发送出去,而不管错误是否存在。
如果事务中存在错误,我们将不想发送电子邮件。注意:我可能会添加额外的监听程序,这些监听程序也会插入到DB中,因此我需要知道如何在事务成功时才能发出电子邮件。
DB::beginTransaction();
try {
event(new LaravelQuestionPosted($question, $user));
// Listeners: AddQuestionToQuestionsTable
// Listeners: QuestionAddedNotificationSend
} catch (\Exception $e) {
DB::rollback();
// something went wrong
}
DB::commit();有人知道如何让它按预期工作吗?
发布于 2017-03-26 06:39:58
在使用event()调度事件时,可以将true作为第三个参数传递,以便在任何处理程序返回非空值或引发异常时停止侦听处理。
https://stackoverflow.com/questions/43021901
复制相似问题