2011-02-02 19 views
10

मैं एक Magento मॉड्यूल पर काम कर रहा हूं और यह जानने की जरूरत है कि मॉडल की एक श्रृंखला को वापस रोल करना संभव है या नहीं।Magento पकड़ने के अपवाद और रोलिंग डेटाबेस डेटाबेस लेनदेन

admin/role 
admin/user 
core/website 
core/store_group 
core/store 
mymodule/model1 
mymodule/model2 

मेरे समस्या यह है कि जब भी इन मॉडलों में से किसी एक अपवाद फेंक, मैं MySQL में जाते हैं और मैन्युअल रूप से हटाने की आवश्यकता है: असल में, मैं अपने मॉड्यूल से कई के साथ साथ पांच मॉडल है कि मैं एक के बाद एक को बचाने की जरूरत है सभी पंक्तियों को बचाया गया था। यह बहुत अनुत्पादक है।

मुझे पूरा यकीन है कि Magento में रोलबैक प्रक्रिया नहीं है जिसे मैं अपने संदर्भ में एक्सेस कर सकता हूं। उदाहरण के लिए, मैंने Mage_Core_Model_Abstract में देखा और सहेजने की विधि में, रोलबैक तंत्र सभी सुरक्षित हैं।

तो, मेरा सवाल यह है कि Magento में डेटाबेस लेनदेन करने के लिए कुछ बेहतरीन अभ्यास है कि मुझे अवगत होना चाहिए?

उत्तर

13

मैंने कोर कोड में निम्नलिखित उपयोग किया है, और ऐसा लगता है कि आपने जो आदेश दिया है।

$transactionSave = Mage::getModel('core/resource_transaction'); 
$transactionSave->addObject($model_one) 
$transactionSave->addObject($model_two) 
$transactionSave->save(); 

core/resource_transaction वस्तु आप Magento वस्तुओं जोड़ने के लिए, और उन पर बचाने के लिए एक बड़े पैमाने पर प्रदर्शन करने के लिए अनुमति देता है। इसे आज़माएं, और मुझे यह सुनना अच्छा लगेगा कि यह कैसे करता है, या नहीं, टिप्पणियों में आपके लिए काम करता है।

+0

यह बिल्कुल काम किया। धन्यवाद। मैंने यह भी पाया कि यदि मुझे मॉडल में अधिक डेटा जोड़ने की आवश्यकता है तो मैं फिर से लेनदेन को बचा सकता हूं। उदाहरण के लिए, मुझे स्टोर मॉडल के लिए website_id और store_group_id सेट करने की आवश्यकता है। पहले लेनदेन को बचाने के बाद, मॉडल प्राथमिक कुंजी के साथ अद्यतन किया जाता है। फिर मैं फिर से बचाता हूं और पंक्तियां अपडेट की जाती हैं। –

संबंधित मुद्दे