شرح صفوف ومحتوى الفقرة
عندما تتطلب العملية تعديل عدة جداول معاً كخصم رصيد المحفظة وتسجيل عملية الدفع، فإن فشل الخطوة الثانية يترك البيانات مشوهة. يضمن تغليف الاستعلامات المترابطة داخل DB::transaction الذرية الكاملة؛ فإما أن تنجح كافة الخطوات وتُعتمد، أو يتم التراجع عنها جميعاً تلقائياً عند حدوث أي خطأ.
- الحذف المشروط (delete): حذف السجلات المطابقة لشرط التصفية وإرجاع عدد الصفوف المحذوفة.
- المعاملة الذرية (DB::transaction): فتح معاملة قاعدة بيانات وتنفيذ الكود ثم اعتماد التغييرات COMMIT تلقائياً.
- التراجع التلقائي (Auto Rollback): إلغاء كافة التغييرات السابقة تلقائياً فور انطلاق أي استثناء داخل الدالة المغلقة.
PHP
DB::transaction(function () {
DB::table('wallets')->where('user_id', 1)
->decrement('balance', 100);
DB::table('payments')->insert([
'user_id' => 1, 'amount' => 100,
]);
});