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()); }
♥ 作者:离岸少年
♠ 出处:https://www.cnblogs.com/jackzhuo/
♣ 本博客大多为学习笔记或读书笔记,本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。