Phalcon \ Mvc \ Model - 回滚失败的交易

时间:2013-11-13 21:00:29

标签: php phalcon

代码:

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(); in to?

谢谢!

1 个答案:

答案 0 :(得分:3)

我建议完全重载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;
}