تصور کنید که میخواهید چندین عملیات روی دیتابیس انجام دهید، مثلاً در یک فروشگاه آنلاین: ذخیرهسازی سفارش جدید و کاهش موجودی محصولات در انبار. اگر هر یک از این عملیات جداگانه انجام شود و در یک مرحلهی بعدی یکی از آنها با موفقیت انجام نشود، دیتابیس به حالت نامناسبی وارد میشود؛ به عبارت دیگر، دیتابیس در وضعیت معتبر قرار نمی گیرد.
از DB::transaction در Laravel میتوان استفاده کرد تا اینگونه موارد را کنترل کند. این متد اطمینان حاصل میکند که تمامی عملیات در یک تراکنش انجام میشوند و در صورت بروز هرگونه خطا، تراکنش به حالت اولیه باز میگردد و هیچ تغییری در دیتابیس اعمال نمیشود.
⚙️ چگونگی استفاده از DB::transaction:
1️⃣ تعریف تراکنش
2️⃣ اجرای عملیات
3️⃣ تایید تراکنش
4️⃣ بازگشت در صورت خطا
📝 مثال: فرض کنید میخواهید یک فرآیند ثبت سفارش را پیادهسازی کنید. این فرآیند شامل ذخیرهسازی سفارش در جدول سفارشها و کاهش موجودی محصولات موجود در سبد خرید است.
DB::transaction(function () use ($order, $cart) {
try {
// 1️⃣ تعریف تراکنش
// اجرای عملیات
$order->save(); // ذخیره سفارش
foreach ($cart->items as $item) {
$product = Product::find($item['product_id']);
$product->stock -= $item['quantity'];
$product->save(); // کاهش موجودی محصول
}
// 3️⃣ تایید تراکنش
DB::commit();
} catch (\Exception $e) {
// 4️⃣ بازگشت در صورت خطا
DB::rollBack();
// مدیریت خطا، پیام به کاربر یا انجام دیگر عملیاتهای مورد نیاز
Log::error('Error occurred during transaction: ' . $e->getMessage());
// پرتاب خطا مجدد به عنوان نیازمند پیادهسازی
throw $e;
}
});❕ نکات کلیدی:
- استفاده از DB::transaction به کنترل تراکنشهای پایگاه داده کمک میکند و اطمینان حاصل میشود که همه چیز یا هیچ چیز انجام میشود.
- در صورت بروز خطا، تراکنش به حالت اولیه باز میگردد و تغییرات قبلی لغو میشوند.
👤 Maryam
💎 Channel: @DevelopixLaravel
