• yii2 事务添加


    在某些程序在执行的时候需要进行多个动作,而我们的业务要求是某个动作在执行错误的时候该进程所有的动作都不再执行,全部执行成功才算成功,否则就回到执行之前的状态,这就需要用到事务的处理。

    示例(基于YII框架):

            //支付单编号
            $paySn = CommonFun::makeRandSn($this->_memberId);
    
            $transaction = Yii::$app->db->beginTransaction();
            try{
    
                //格式化订单数据orders
                $order = $this->formatOrderData($cartGoods,$paySn);
    
                $orderId = $this->db::insert('orders',$order);
                if(!$orderId) throw new Exception('orders订单添加失败');
    
                $flag = $this->addOrderGoods($orderId,$order,$cartGoods['goods']);
                if(!$flag) throw new Exception('order_goods添加失败');
    
                $flag = $this->addOrderCommon($orderId,$order,$addressInfo,$extra);
                if(!$flag) throw new Exception('order_common添加失败');
    
                //更新库存,增加销售
                $flag = $this->updateGoodsStorage($cartGoods['goods']);
                if(!$flag) throw new Exception('库存更新失败');
    
                if($this->request('order_type')=='2' && $this->request('join_order_id')<=0)
                {
                    //创建拼团开团订单 这时默认拼团只能购买单个产品
                    if(!$this->createPintuanOpenOrder($cartGoods['goods'][0],$orderId))
                        throw new Exception("开团订单创建失败");
                }
                //更新优惠券
                if($extra['coupon_info']){
                    //更新优惠券
                    $where = ['id'=>$extra['coupon_info']['coupon_id']];
                    if(!Coupons::updateAll(['state'=>'2','update_time'=>time()],$where))
                        throw new Exception("优惠券更新失败");
                }
                 //上面动作全部有效才提交,否则回滚
                $transaction->commit();
                return array('pay_sn'=>$paySn,'order_id'=>$orderId);
    
            }catch(Exception $e)
            {
                $transaction->rollBack();
                $this->error('下单失败:'.$e->getMessage());
            }
  • 相关阅读:
    SQL获取当天0点0分0秒和23点59分59秒方法
    全球唯一标识符 System.Guid.NewGuid().ToString()
    Js获取当前日期时间及其它操作
    MySQL日期函数与日期转换格式化函数大全
    访问者模式
    享元模式
    中介者模式
    职责链模式
    命令模式
    桥接模式
  • 原文地址:https://www.cnblogs.com/jackzhuo/p/12982157.html
Copyright © 2020-2023  润新知