Magento 2 - कई मॉडल / संसाधन मॉडल ऑब्जेक्ट के लिए डेटाबेस लेनदेन?


11

यदि मेरे पास एक तर्क है जिसमें कई मॉडल ऑब्जेक्ट को अपडेट करना शामिल है जो डेटाबेस में कुछ तालिकाओं को अपडेट करेगा, तो डेटा अखंडता सुनिश्चित करने के लिए डेटाबेस लेनदेन कैसे प्रदान करें?

जवाबों:


22

आप संभवतः कई जुड़े ऑब्जेक्ट्स का एक कुल बचत कर रहे हैं। निर्धारित करें कि इनमें से कौन सी वस्तु मूल है , उदाहरण के लिए:

               [order]              <------ this is the root
               /  |  \
billing_address   |   shipping_address
                  |
            order_items

रूट के संसाधन मॉडल में अद्यतन तर्क जोड़ें और वहां लेनदेन का उपयोग करें।

लेन-देन का उपयोग कैसे करें

  1. यदि आप कई मॉडल उदाहरणों को सहेजना चाहते हैं, तो आप लेनदेन मॉडल का उपयोग कर सकते हैं। \Magento\Framework\DB\TransactionFactoryअपने संसाधन मॉडल में एक लेनदेन कारखाने को इंजेक्ट करें और इसे इस तरह उपयोग करें:

    $saveTransaction = $this->transactionFactory->create();
    $saveTransaction->addObject($objectToSave);
    $saveTransaction->addObject($otherObjectToSave);
    ...
    $saveTransaction->save();

    प्रतिबद्ध या रोलबैक स्वचालित रूप से save()विधि द्वारा नियंत्रित किया जाता है ।

  2. वैकल्पिक रूप से आप सीधे लेनदेन का उपयोग कर सकते हैं (यदि आप इसके अलावा अन्य डेटाबेस अपडेट का उपयोग करते हैं $model->save():

    $connection = $this->getConnection();
    $connection->beginTransaction();
    try {
        ...
        $connection->commit();
    } catch (\Exception $e) {
        $connection->rollBack();
        throw $e;
    }

क्या रिपॉजिटरी का उपयोग करते समय म्यूटेंट ऑब्जेक्ट्स को बचाने का कोई समर्थित तरीका है? वे आंतरिक रूप save()से संसाधन मॉडल के तरीके कहते हैं, इसलिए उनमें से प्रत्येक को अलग-अलग लेनदेन में बचाया जाएगा। रिपॉजिटरी में अक्सर कुछ सत्यापन तर्क होते हैं, इसलिए आमतौर पर सादे संसाधन मॉडल save()विधियों के बजाय उनका उपयोग करने की सिफारिश की जाती है ।
बार्टोज़ कुबिकी

1
@BartoszKubicki है। यदि दो संसाधन मॉडल एक ही कनेक्शन का उपयोग करते हैं (जो वे आमतौर पर करते हैं, तो पहले संसाधन के संबंध में सहेजने के बाद डिफ़ॉल्ट एक) उसी लेनदेन में प्रश्नों को जोड़ा जाएगा। देखें कि ऑर्डर कैसे सेव होते हैं, लाइन से लाइन। आर्डर रिपॉजिटरी :: सेव () प्रविष्टि है।
vitoriodachef
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.