gpt4 book ai didi

php - 一次提交中的 Magento 多个数据库事务

转载 作者:可可西里 更新时间:2023-10-31 22:42:51 24 4
gpt4 key购买 nike

我知道在zend框架中怎么做

$db->beginTransaction();

try {
$db->query(...);
$db->query(...);
$db->query(...);
.
.
.
$db->commit();
} catch (Exception $e) {
$db->rollBack();
}

但我想用 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();
}

如果其中任何一个保存失败,那么都应该回滚

谢谢

最佳答案

查看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();
}

关于php - 一次提交中的 Magento 多个数据库事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27502941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com