🚨 فرض کنید کاربر سفارشی ثبت میکند.
در کد شما این اتفاق میافتد:
$order = Order::create($data);
$product->decrement('stock');
Payment::create($paymentData);
حالا تصور کنید بعد از ثبت سفارش، هنگام ثبت پرداخت خطایی رخ دهد.
نتیجه؟
❌ سفارش ثبت شده است.
❌ موجودی کالا کم شده است.
❌ اما پرداخت وجود ندارد!
سیستم شما وارد یک وضعیت ناسازگار (Inconsistent State) میشود.
راه حرفهای:
DB::transaction(function () {
$order = Order::create($data);
$product->decrement('stock');
Payment::create($paymentData);
});اگر یکی از عملیاتها شکست بخورد:
✅ تمام تغییرات Rollback میشوند.
هیچ داده ناقصی داخل دیتابیس باقی نمیماند.
---
🎯 اشتباه رایج
بسیاری از برنامهنویسان فکر میکنند Transaction فقط برای جلوگیری از خطاست.
در حالی که وظیفه اصلی آن:
حفظ یکپارچگی دادهها (Data Integrity) است.
💡 اگر چند عملیات به هم وابسته هستند، احتمالاً باید داخل Transaction اجرا شوند.
@CodeVerse_dev