اذهب إلى المحتوى

السؤال

نشر

لقد قرأت ضرورة استخدام DB::transaction عند وجود أكثر من عملية إدخال إلى قاعدة البيانات. ولكن في هذه الحالة هل يجب أن أضع try و catch بداخلها؟ أم العكس أي أقوم بوضع transaction وعمليات الإدخال بداخل try ؟ مثل التالي:

try {
    
   DB::transaction(function() {

        ......

    });

    if(is_null($exception)) {
        return true;
    } else {
        throw new Exception;
    }

}
catch(Exception $e) {
    return false;
}

أيهما أفضل ويتم استخدامه في هذه الحالة؟

Recommended Posts

  • 0
نشر

الأفضل استخدام DB::transaction خارج try & catch

وجعل الأوامر

DB::insert
DB::commit

بداخل try

والأمر DB::rollback في catch

ليصبح البرنامج كالآتي:

DB::beginTransaction();

try {
    DB::insert(...);
    DB::insert(...);
    DB::insert(...);

    DB::commit(); // كل شيء يعمل على ما يرام
    
} catch (\Exception $e) {
    DB::rollback();
  	// هنالك خطأ ما أثناء التنفيذ
}

وبهذه الإجراءات, نتفادى أي خطأ قد يحدث في قاعدة البيانات سببه المستخدم

  • 0
نشر

إذا كنت تستخدم PHP7 ، فاستخدم Throwable in catch لالتقاط استثناءات المستخدم والأخطاء الفادحة. 

DB::beginTransaction();

try {
    DB::insert(...);    
    DB::commit();
} catch (\Throwable $e) {
    DB::rollback();
    throw $e;
}

إذا كان يجب أن يكون الرمز الخاص بك متوافقًا مع PHP5 ، فاستخدم Exception و Throwable:

DB::beginTransaction();

try {
    DB::insert(...);    
    DB::commit();
} catch (\Exception $e) {
    DB::rollback();
    throw $e;
} catch (\Throwable $e) {
    DB::rollback();
    throw $e;
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...