PhalconMvcModel - 回滚失败的事务


PhalconMvcModel - rolling back failed transaction

代码:

class myModel extends Phalcon'Mvc'Model
{
    public function beforeSave()
    {
        $this->getDi()->getShared('db')->begin();
    }
    ...
    public function afterSave()
    {
        $this->getDi()->getShared('db')->commit();
    }
}

我的问题是 - 如果在此过程中,在 beforeSave() 和 afterSave() 之间抛出异常会发生什么 - 我如何干净地回滚事务?我应该把$this->getDi()->getShared('db')->rollback(); 放在哪里?

谢谢!

我建议完全重载save()方法。

这是我的交易示例。请注意,如果您不打算在此处实现其他逻辑(例如删除相关模型),则不需要事务

/**
 * Delete old relations before saving new ones
 */
public function save($data=null, $whiteList=null)
{
    $db = $this->getDI()->get('db');
    try
    {
        // Start transaction
        $db->begin();
        // ... Do some additional work. Remove related models etc...
        // Update model
        if (!parent::save($data, $whiteList))
            throw new 'Exception('Cannot save the model');
        $db->commit();
    }
    catch ('Exception $e)
    {
        $db->rollback();
        $this->appendMessage(new 'Phalcon'Mvc'Model'Message($e->getMessage(), '', 'error', $this));
        return false;
    }
    return true;
}