什么是Mage :: getModel('core/resource_transaction')以及何时在Magento中使用此模型?

s-h*_*ter 4 transactions model magento

在Magento的核心代码中,Mage::getModel('core/resource_transaction')这个模型做了什么以及在什么情况下我们想要启动和使用这个核心模型类?该模型在Magento数据库中是否有对应的表?

Nik*_*tas 10

这是一个资源Model class(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();
}
Run Code Online (Sandbox Code Playgroud)

正如您在上面的代码中看到的那样,我们save()2次.一个用于产品,一个用于类别.捕获2个不同的异常,以及2个不同的事务到数据库.

在某些情况下(我认为很少见)需要使用2个或更多对象进行更改并在单个事务中保存到数据库中.

所以在我们的例子中,我们将$product_objectand 添加$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();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下的利润是,如果我们添加的一个或多个对象出现问题,则不会向数据库发布任何更改.