在Magento的核心代碼Mage::getModel('core/resource_transaction')
中,這個模型有什麼作用,以及我們想在什麼情況下啓動和使用這個核心模型類?這個模型在Magento數據庫中有對應的表嗎?什麼是Mage :: getModel('core/resource_transaction')以及何時在Magento中使用此模型?
回答
這是一個資源模型類(Mage_Core_Model_Resource_Transaction
)。
在例如:
當你想改變的東西在一個產品,你想改變一個類別的東西你要實例化catalog/category
和catalog/product
同一時間。並進行更改如下:
$prod_id = 554;
$cat_id = 323;
$product_object = Mage::getModel('catalog/product')->load($prod_id);
$product_object->setName('NewProductName');
try{
$product_object->save();
echo "Transaction for PRODUCT completed successfully";
} catch(EXCEPTION $e) {
echo $e->getMessage();
}
$category_object = Mage::getModel('catalog/category')->load($cat_id);
$category_object->setName('NewCatName');
try{
$category_object->save();
echo "Transaction for Category completed successfully";
} catch(EXCEPTION $e) {
echo $e->getMessage();
}
正如你可以在上面我們save()
2倍的代碼中看到。一個用於產品,一個用於類別。捕獲2個不同的例外,以及2個不同的交易到數據庫。
在一些(罕見的我認爲)的情況下,需要使用2個或更多的對象進行更改並保存到數據庫中的所有單筆交易。
所以在我們的例子中,我們添加$product_object
和$category_object
到Mage::getModel('core/resource_transaction')
實例:
$one_transaction = Mage::getModel('core/resource_transaction');
$one_transaction->addObject($product_object);
$one_transaction->addObject($category_object);
try{
$one_transaction->save();
} catch(EXCEPTION $e) {
echo $e->getMessage();
}
在這種情況下的利潤,如果出問題時,我們增加了一個或多個對象,沒有改變是發佈到數據庫。
不,這個模型不使用任何表格。它需要使MySQL事務功能。例如,您希望保存發票,裝運和訂單,但如果出現問題,請回滾所有以前保存的數據。您可以這樣做:
$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($invoice)
->addObject($order)
->addObject($shipment);
$transactionSave->save();
事務保存方法將遍歷所有對象並調用其中的保存方法。例如,如果在裝運過程中出現問題,Magento會調用$ this - > _ rollbackTransaction();方法(類Mage_Core_Model_Resource_Transaction,第166行),並將使用MySQL功能回滾所有先前保存的數據。
如果你想調用另一個然後保存方法爲對象,你便可以調用$ transactionSave->保存()後使用addCommitCallback方法
$transaction->addCommitCallback(array($order, 'place'));
;它會調用$ order-> place()方法。 有關更多示例,請參閱Mage_Sales_Model_Service_Quote類 - 它在很多地方使用事務保存。
- 1. Magento-何時使用Mage :: getResourceModel和Mage :: getModel
- 2. Magento - 何時使用Mage :: getResourceModel
- 3. 極品Magento模型文檔(法師:: getModel())
- 4. magento 2等效於Mage :: getModel('customer/customer') - > loadByEmail();是?
- 5. Mage :: getModel('index/process')返回false
- 6. 如何在Magento中使用Mage :: helper?
- 7. 我可以在視圖而不是表格上使用Mage :: getModel函數嗎?
- 8. Magento:何時使用Mage :: getResourceModel()單獨
- 9. Magento - 獲取銷售訂單號(!$ order = Mage :: getModel
- 10. Magento XMLConnect ...它是什麼以及如何使用它?
- 11. 在magento 2 getModel的正確方法是什麼?
- 12. 如何使用sql COUNT for Mage :: getModel() - > getCollection();?
- 13. 什麼是__printf_fp()以及何時調用?
- 14. 什麼是IE中的Quirks模式?何時以及爲什麼我們在Internet Explorer中使用Quirks模式?
- 15. Mage log(magento)中的null是什麼意思?
- 16. 爲什麼以及何時使用process.nextTick?
- 17. 爲什麼以及何時使用TreeMap
- 18. 爲什麼以及何時使用__noop?
- 19. 爲什麼以及何時使用LINQ?
- 20. 爲什麼以及如何使用Angular2/Typescript模型?
- 21. 此模板中的類型是什麼?
- 22. 什麼是MySQL中的鎖定以及何時使用它?
- 23. 什麼是UCM中的複合基線以及何時使用?
- 24. Mage :: getUrl('a/b/c')在magento中返回以及如何更改它?
- 25. 在MVC中,模型做了什麼以及與SwingWorker的關係是什麼?
- 26. 什麼是實體框架中的複雜類型以及何時使用它?
- 27. 什麼是SS_X_JSESSIONID以及何時創建?
- 28. 這是什麼類型的對象以及如何使用它?
- 29. Backbone.js:模型,集合,路由器何時以及爲什麼?
- 30. 何時,爲什麼以及如何在Redux中使用Action Creators?