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

问题描述 投票:0回答:1

我有这个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循环的第一个项目,并抛出一个错误,阻止其余代码执行。

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

php laravel laravel-5.5
1个回答
1
投票

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

您可以使用DB Facade上的事务方法在数据库事务中运行一组操作。如果在事务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));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.