Mysql事物回滚

tp6shop --Singwa–9-13

注意数据库要是支持回滚的innoDb ,不要是MyISAM

首先开启事务

$this->model->startTrans();

Db::startTrans();

然后try catch

提交

$this->model->commit();

有任何一个发生错误就触发回滚

$this->model->rollback();

测试可以把每一个sql结果打印出来,并给其中一个sql结果空值

<?php
/**
 *Create By Msy
 *User:  Msy
 *Date: {2020/6/12}
 *Time:  {10:40}
 *Ps: 现在的努力就是为了年轻时吹的一手牛逼。
 */

namespace app\common\business;
use app\common\model\mysql\Goods as GoodsModel;

class Goods extends BusBase
{
    public $model = null;
    public function __construct()
    {
        $this->model = new GoodsModel();
    }

    public function insertData($data)
    {
        $this->model->startTrans();//开启事物

        try {
            //插入到Goods表
            $goodsId = $this->add($data);

            if (!$goodsId) {
                return false;
            }

            //插入到Goods_sku表
            //如果是统一规格
            if ($data['goods_specs_type'] == 1) {
                $goodsSkuData = [
                    'good_id' => $goodsId,
                ];
            } else if ($data['goods_specs_type'] == 2) {
                $goodsSkuObj = new GoodsSku();
                $data['goods_id'] = $goodsId;
                $res = $goodsSkuObj->saveAll($data);

                if (!empty($res)) {
                    //总库存
                    $stock = array_sum(array_column($res, 'stock'));//返回的插入SKU表的库存和
                    $goodsUpdateData = [
                        'stock' => $stock,
                        'price' => $res[0]['price'],
                        'cost_price' => $res[0]['cost_price'],
                        'sku_id' => $res[0]['id'],
                    ];
                    $goodsRes = $this->model->updateById($goodsId, $goodsUpdateData);

                    if (!$goodsRes) {

                        throw  new \think\Exception('商品信息回填失败');
                    }
                    
                }
                else {
                    throw  new \think\Exception('SKU信息添加错误');
                }
            }

            $this->model->commit(); //提交事物
            return true;
        }catch (\Exception $e){
            //事物回滚
            $this->model->rollback();
            return false;
        }
        return true;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苗先生的PHP记录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值