Yii2.0-数据库事务应用

事务:

是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。


Yii2.0事务的应用:

$transaction = Yii::$app->db->beginTransaction();
try {
    $connection->createCommand($sql1)->execute();
    //如果执行失败则抛出错误
    if(status == false)
        throw new \Exception('这里是错误原因');
    $connection->createCommand($sql2)->execute();

    $transaction->commit();            //只有执行了commit(),对于上面数据库的操作才会真正执行
    } 
catch (Exception $e) {
    $error = $e->getMessage();  //获取抛出的错误
    $transaction->rollBack();    
    }

以上即是数据库事务的简单应用。事务的应用在于多表操作,只有所有数据库操作都成功了,才会执行,其中一个地方失败,就不会执行,以保证数据库动作的完整性。


实例:

下面是一个删除的事务实例,我们要达到的目的是删除model时也同时要删除relation,如果其中一步失败则callback

        $transaction = Yii::$app->db->beginTransaction();
        try{
            //删除$model中的数据
            $res = $model->deleteAll($cond);
            if(!$res)
                throw new \Exception('操作失败!');
            
            //删除$model对应的$relation中的数据
            $rt = $relation->deleteAll(['polymeric_id'=>$cond['id']]);
            if(!$res)
                throw new \Exception('操作失败!');
            
            //以上执行都成功,则对数据库进行实际执行
            $transaction->commit(); 
            return Helper::arrayReturn(['status'=>true]);
        }catch (\Exception $e){
            //如果抛出错误则进入catch,先callback,然后捕获错误,返回错误
            $transaction->rollBack();
            return Helper::arrayReturn(['status'=>false,'msg'=>$e->getMessage()]);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值