जवाबों:
आप संभवतः कई जुड़े ऑब्जेक्ट्स का एक कुल बचत कर रहे हैं। निर्धारित करें कि इनमें से कौन सी वस्तु मूल है , उदाहरण के लिए:
[order] <------ this is the root
/ | \
billing_address | shipping_address
|
order_items
रूट के संसाधन मॉडल में अद्यतन तर्क जोड़ें और वहां लेनदेन का उपयोग करें।
यदि आप कई मॉडल उदाहरणों को सहेजना चाहते हैं, तो आप लेनदेन मॉडल का उपयोग कर सकते हैं। \Magento\Framework\DB\TransactionFactory
अपने संसाधन मॉडल में एक लेनदेन कारखाने को इंजेक्ट करें और इसे इस तरह उपयोग करें:
$saveTransaction = $this->transactionFactory->create();
$saveTransaction->addObject($objectToSave);
$saveTransaction->addObject($otherObjectToSave);
...
$saveTransaction->save();
प्रतिबद्ध या रोलबैक स्वचालित रूप से save()
विधि द्वारा नियंत्रित किया जाता है ।
वैकल्पिक रूप से आप सीधे लेनदेन का उपयोग कर सकते हैं (यदि आप इसके अलावा अन्य डेटाबेस अपडेट का उपयोग करते हैं $model->save()
:
$connection = $this->getConnection();
$connection->beginTransaction();
try {
...
$connection->commit();
} catch (\Exception $e) {
$connection->rollBack();
throw $e;
}
save()
से संसाधन मॉडल के तरीके कहते हैं, इसलिए उनमें से प्रत्येक को अलग-अलग लेनदेन में बचाया जाएगा। रिपॉजिटरी में अक्सर कुछ सत्यापन तर्क होते हैं, इसलिए आमतौर पर सादे संसाधन मॉडलsave()
विधियों के बजाय उनका उपयोग करने की सिफारिश की जाती है ।