邮件发送失败时不保存数据

时间:2018-03-06 19:41:46

标签: php laravel laravel-5.5

我有这个foreach循环,负责在将信息保存到数据库后发送邮件。

    foreach ($cart->items as $item){

        $order->details()->create([
            'quantity' => $item['quantity'],
            'discount' => $product->discount,
            'total' => $total,
        ]);

        Mail::to($product->user->email)->send(new ProductOrdered($item, $order));
    }

当邮件正常工作时,一切都很完美。无论何时邮件发送失败,只保存传递给foreach循环的第一个项目,并抛出一个错误,阻止其余代码执行。

在这种特殊情况下,有没有办法阻止在邮件发送失败时保存数据?

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用数据库事务?

  

您可以使用数据库外观上的事务方法在数据库事务中运行一组操作。如果在事务Closure中抛出异常,则事务将自动回滚。

https://laravel.com/docs/5.5/database#database-transactions

foreach ($cart->items as $item) {
    DB::transaction(function () {
        $order->details()->create([
            'quantity' => $item['quantity'],
            'discount' => $product->discount,
            'total' => $total,
        ]);

        Mail::to($product->user->email)->send(new ProductOrdered($item, $order));
    }
}