تكرار السؤال: …
الإجابة المختصرة
تنفذ العمليات ذرية وتلغيها عند الفشل؛ وتقبل دالة DB::transaction معاملاً يحدد عدد مرات إعادة المحاولة التلقائية عند حدوث Deadlock.
الشرح
في العمليات المالية والحجوزات، تضمن المعاملات عدم وقوع أخطاء جزئية. عند تشغيل معاملات متزامنة، قد تقفل العمليات صفوفاً بترتيب متعارض مما يسبب Deadlock في قاعدة البيانات. توفر دالة DB::transaction(callback, attempts: 5) إعادة محاولة تلقائية ذكية لمعالجة الـ Deadlocks العابرة دون إشعار العميل بالخطأ.
مثال بالكود
DB::transaction(function () use ($from, $to, $amount) {
$from->decrement('balance', $amount);
$to->increment('balance', $amount);
}, 5); // 5 محاولات عند حدوث Deadlockأخطاء شائعة
- إرسال إيميلات أو طلبات HTTP لجهات خارجية داخل دالة DB::transaction، حيث إنها ستتكرر مع كل محاولة ولا يمكن التراجع عنها عند الـ Rollback.