单个提交中的Magento多个数据库事务

Ahm*_*med 4 php zend-framework magento

我知道如何在zend框架中做到这一点

$db->beginTransaction();

try {
   $db->query(...);
   $db->query(...);
   $db->query(...);
   .
   . 
   .
   $db->commit();
} catch (Exception $e) {
    $db->rollBack();
}
Run Code Online (Sandbox Code Playgroud)

但是我想用magento模型来做这件事

$db->beginTransaction();

try {
   $modelOne   = Mage::getModel('modulename/table1');
   $modelTwo   = Mage::getModel('modulename/table2');
   $modelThree = Mage::getModel('modulename/table3');

   $db->query($modelOne);
   $db->query($modelTwo);
   $db->query($modelThree);
   .
   . 
   .
   $db->commit();
} catch (Exception $e) {
    $db->rollBack();
}
Run Code Online (Sandbox Code Playgroud)

如果他们中的任何人未能保存,那么所有人都应该回滚

谢谢

Tox*_*Bes 5

查看app/code/core/Mage/Core/Model/Resource/Transaction.php

此模型允许在事务中添加另一个模型作为对象.在保存期间,它会调用$object->save()每个添加的对象.如果某些内容失败,则会调用 $object->getResource()->rollBack()每个对象.您还可以通过添加提交回调addCommitCallback(array($object, 'callbackFunctionName')).

如果你需要删除事务,请调用$transaction->delete()而不是$transaction->save()在这种情况下调用$object->delete()而不是$object->save()每个对象.

例:

try {
    $transaction = Mage::getModel('core/resource_transaction')
                           ->addObject(Mage::getModel('modulename/table1'))
                           ->addObject(Mage::getModel('modulename/table2'))
                           ->addObject(Mage::getModel('modulename/table3'));

    $transaction->save();
} catch (Exception $e) {
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)