我是靠谱客的博主 虚幻路人,最近开发中收集的这篇文章主要介绍thinkphp5 事务回滚,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

thinkphp5
可以不用 try {} catch (Exception $e) {} 可以直接使用
 Db::startTrans();
 Db::commit();
 Db::rollback();
if (!$updateMoney) {
           Db::rollback();

            return V(0, '出错,请重试');
        }

注意 使用tp5事务时 不要用db() 要用Db::name 或者 Db::table

 // 开启事务
        Db::startTrans();
        try {
            // 开启事务  Db::startTrans(); //写在这个位置也可以
        
            //任意一个表写入失败都会抛出异常:
            //比如加一个判断
            if (false) {
                throw new Exception('操作失败'); //抛出错误
            }

            //根据 订单id 和门店 id 去判断 有没有分配分拣员
            $where_a['id'] = $post_data['order_id'];
//            $where_a['store_id'] = $post_data['store_id'];
            $find_storer = Db::name('shopro_order')->where($where_a)->value('storer_id');

            if(!$find_storer){ //没有分配的分拣员
                //先去判断有没有分拣员上班
                $storer_info = $this->get_assign_storer();
                if(!$storer_info){
                    throw new Exception('无分拣员接单');
                }
                //第一步要去获取分拣员的数据  读取缓存数据
                $storer_id = $storer_info['id']; //分拣员id
                //先去分配分拣员
                $where_storer['order_id'] = $post_data['order_id'];
                $update_storer['storer_id'] = $storer_id;
                $re['storer'] = Db('shopro_order_son')->where($where_storer)->update($update_storer);
                //主表
                $where_order['id'] = $post_data['order_id'];
                $update_order['storer_id'] = $storer_id;
                $update_order['storer_state'] = 1;
                $update_order['storer_assign_time'] = date('Y-m-d H:i:s',time());
                $re['order'] = Db('shopro_order')->where($where_order)->update($update_order);
            }
            //去修改子订单表 clz_shopro_order_son
            $where_son['order_id'] = $post_data['order_id'];
            $where_son['store_id'] = $post_data['store_id'];
            $update_son['store_state'] = 2;
            $update_son['storer_state'] = 1;
            $update_son['store_stockup_time'] = date('Y-m-d H:i:s',time());
            $re['son'] = Db('shopro_order_son')->where($where_son)->update($update_son);
            //任意一个表写入失败都会抛出异常:
            if (in_array('0', $re)) { //  if ($res1==0 || $res2==0 ||$res3 == 0) {
                throw new Exception('操作失败');//抛出错误
            }
            // 提交事务
            Db::commit();
            $this->return_data(1, '操作成功', true);
        } catch (Exception $e) {
            // 回滚事务 如获取到异常信息,对所有表的删、改、写操作,都会回滚至操作前的状态:
            Db::rollback();
            $msg = $e->getMessage();
            $this->return_data(0, $msg, true);
        }





、、、、、、、、


try {
                            //开启事物
                    Db::startTrans();
                    $res1 = Db:name('frieslandtravel_apply')->insert($add_apply);
                    $res2 = Db:name('frieslandtravel_apply_son')->insert($add_apply_son);
                    //任意一个表写入失败都会抛出异常:
                    if ($res1==0 || $res2==0) {
                        throw new Exception('操作失败');//抛出错误
                    }
                    // 提交事务
                    Db::commit();
                    exit_json( init_err(0, '操作成功') );
                } catch (Exception $e) {
                    // 回滚事务 如获取到异常信息,对所有表的删、改、写操作,都会回滚至操作前的状态:
                    Db::rollback();
                    exit_json( init_err(1, '操作失败') );
                }




if ( !function_exists('init_err') ) {
    function init_err($err=1, $msg='未知错误', $data=null)
    {
        return [
            'err' => $err,
            'msg' => $msg,
            'data' => $data,
        ];
    }
}


if ( !function_exists('exit_json') ) {
    /**
     * Desc:输出json字符串
     * Date:2021/1/31 14:55
     * Author: guanzy@huilan-online.com
     * --------------------------------
     * @param $data
     * --------------------------------
     */
    function exit_json($data)
    {
        exit( json_encode($data, 256) );
    }
}

最后

以上就是虚幻路人为你收集整理的thinkphp5 事务回滚的全部内容,希望文章能够帮你解决thinkphp5 事务回滚所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部