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

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事务、单模型事务及多模型事务写法)