Laravel Transactions
Laravel's DB::transaction() handles begin/commit/rollback automatically and retries on deadlock.
Laravel's DB::transaction() handles begin/commit/rollback automatically and retries on deadlock.
use Illuminate\Support\Facades\DB;
// Auto transaction
$order = DB::transaction(function () use ($cart) {
$order = Order::create(["user_id" => auth()->id(), "total" => $cart->total()]);
foreach ($cart->items as $item) {
$order->items()->create($item);
Product::where("id", $item->product_id)->decrement("stock", $item->qty);
}
return $order;
}, attempts: 3); // retry up to 3 times on deadlock
// Manual transaction
DB::beginTransaction();
try { ...; DB::commit(); } catch (\Exception $e) { DB::rollBack(); throw $e; }
DB::transaction() with attempts handles deadlock retries automatically — prefer it over manual begin/commit.