如何在Yii事件中使用交易

第三

我知道如何在纯DAOActiveModel中使用事务,在事务调用之前初始化事务$model->save()并在发生任何异常时回滚。

但是,如果我唯一可以访问的代码位置(无论为什么)是Yii事件,那么如何使用事务

public function beforeDelete()
{
    foreach($this->menuItems as $menuItem) $menuItem->delete();

    return parent::beforeDelete();
}

如果我在那里发起事务,捕获可能的异常并在其上回滚整个事务,那么将仅回滚关系模型的删除(在这里:菜单项)。这不会阻止(回滚)主记录的删除。

是否需要通过FALSEbeforeDelete发生异常情况时自行返回防止删除主记录,是我需要注意的吗?还是应该在Yii事件中完全避免交易?

亚历克斯

关于覆盖保存方法:

public function save($runValidation=true,$attributes=null)
{
    $transaction=$this->getDbConnection()->beginTransaction();
    try
    {
        $result = parent::save($runValidation,$attributes);
        if($result)
            $transaction->commit();
        else
            $transaction->rollback();
    }
    catch(Exception $e)
    {
        $transaction->rollback();
        $result = false;
    }
    return $result;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章