【问题标题】:Magento catching exceptions and rolling back database transactionsMagento 捕获异常并回滚数据库事务
【发布时间】:2011-02-02 19:00:32
【问题描述】:

我正在开发一个 Magento 模块,需要知道是否可以回滚一系列模型保存。基本上,我有五个模型加上我的模块中的几个模型,我需要一个接一个地保存:

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

我的问题是,每当这些模型中的任何一个抛出异常时,我都需要进入 MySQL 并手动删除所有已保存的行。这是非常低效的。

我很确定 Magento 没有我可以在我的上下文中访问的回滚过程。比如我查看了Mage_Core_Model_Abstract,在save方法中,回滚机制都是被保护的。

那么,我的问题是,在 Magento 中进行数据库事务是否有一些我应该注意的最佳实践?

【问题讨论】:

    标签: php database magento transactions model


    【解决方案1】:

    我在核心代码中看到了以下内容,它看起来就像您订购的那样。

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

    core/resource_transaction 对象允许您添加 Magento 对象,并对它们执行批量保存。试一试,我很想听听这对您在 cmets 中是否有效。

    【讨论】:

    • 这确实有效。谢谢。我还发现,如果我需要向模型中添加更多数据,我可以再次保存交易。例如,我需要为 store 模型设置 website_id 和 store_group_id。在第一次事务保存后,使用主键更新模型。然后我再次保存并更新行。
    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 2019-06-09
    • 2013-10-16
    • 1970-01-01
    • 2019-07-06
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多