transactions - व्याख्यान वाले लैरवेल 5 के साथ लेनदेन




laravel-5 eloquent (2)

मैं MySQL के लिए MyISAM का उपयोग कर रहा हूं और मैं लेनदेन का उपयोग करना चाहता हूं यह मेरा कोड है:

DB::transaction(function () {
$project = Project::find($id);
$project->users()->detach();
$project->delete();
});

यह कोड सफलतापूर्वक निष्पादित करता है लेकिन मुझे यकीन नहीं है कि लेनदेन काम करता है ... मैं इसे कैसे परीक्षण कर सकता हूं?


वास्तव में ऐसा करने के केवल दो तरीके हैं, न तो विशेष रूप से अच्छा है, क्योंकि डीबी: लेन-देन त्रुटियों की रिपोर्ट नहीं करता है

  1. बंद करने के अंदर एक प्रयास / पकड़ ब्लॉक डालें और कैच ब्लॉक में एक बाहरी चर सेट करें यदि लेनदेन विफल हो जाता है।

  2. मैन्युअल लेन-देन करो, डीबी :: चालूप्रतिबंधन और रोलबैक / कमिट का उपयोग करके, एक अपवाद हैंडलर के साथ, इस उदाहरण के अनुसार:

    DB::beginTransaction();
    try {
        $project = Project::find($id);
        $project->users()->detach();
        $project->delete();
        DB::commit();
        $success = true;
    } catch (\Exception $e) {
        $success = false;
        DB::rollback();
    }

    if ($success) {
        // the transaction worked ...
    }

सवाल काफी पुराना है, लेकिन मेरी राय में माइस्साम स्टोरेज इंजन के साथ लेनदेन प्राप्त करने का कोई तरीका नहीं है।

सबसे हालिया माइस् SQL सर्वर संस्करण 5.7 है, और संबंधित संदर्भ मार्गदर्शिका का वर्णन है, कि माइस्मम स्टोरेज इंजन लेनदेन का समर्थन नहीं करता है।

https://dev.mysql.com/doc/refman/5.7/en/myisam-storage-engine.html

यदि मुझे सही ढंग से पता है, शुरू, प्रतिबद्ध और रोलबैक स्टेटमेंट त्रुटियों के बिना स्वीकार किए जाते हैं, लेकिन व्यवहार अपेक्षा से अलग है