美文网首页
TP5 Db事务、单模型事务及多模型事务写法

TP5 Db事务、单模型事务及多模型事务写法

作者: peterz博客 | 来源:发表于2019-06-21 09:36 被阅读0次

    Db事务写法

         Db::startTrans();
            try {
                Db::name('shop_comments')->strict(false)->insert($param);
                Db::name('shop_order')->where('id', $param['shop_order_id'])->setField('is_comment', 1);   // 将订单表中 是否评价状态设为1
                Db::commit();
                success('评价成功');
            } catch (Exception $e) {
                 Db::rollback();
                error('评价失败');
            }
    

    单模型事务

            $model = model('user_address');
            $model->startTrans();
            try {
                //将当前用户所有收货地址取消默认状态
                if($model->where('user_id', $user_id)->count('id')){
                    $model->where('user_id', $user_id)->setField('is_default', 0);
                }
                //新增
                $param = $this->request->param();
                $param['user_id'] = $user_id;
                $param['is_default'] = 1;        // 设为默认地址
                $model->allowField(true)->save($param);
                $model->commit();
                success('添加收货地址成功');
            } catch (Exception $e) {
                $model->rollback();
                error('添加收货地址失败');
            } 
    

    多模型事务

    public function transaction()
    {
        $modelA = model('A');
        $modelA->startTrans();             // 开启事务A
        $result = $modelA->save($data1);
        if($result === false){
            $modelA->rollBack();        // 事务A回滚
            $this->error('添加A信息失败,请重试');
        }
      
        $modelB = model('B');
        $modelB->startTrans();             // 开启事务B
        $result = $modelB->save($data2);
        if($result === false){
            $modelB->rollBack();        // 事务B回滚
            $modelA->rollBack();        // 事务A回滚
            $this->error('添加B信息失败,请重试');
        }
      
        $modelC = model('C');
        $modelC->startTrans();             // 开启事务C
        $result = $modelC->save($data3);
        if($result === false){
            $modelC->rollBack();        // 事务C回滚
            $modelB->rollBack();        // 事务B回滚
            $modelA->rollBack();        // 事务A回滚
            $this->error('添加C信息失败,请重试');
        }
      
        // 提交事务
        $modelC->commit();
        $modelB->commit();
        $modelA->commit();
      
        $this->success('添加成功', url('index'));
    }
    

    相关文章

      网友评论

          本文标题:TP5 Db事务、单模型事务及多模型事务写法

          本文链接:https://www.haomeiwen.com/subject/qbeeqctx.html