Thinkphp6---开启事务

在使用Thinkphp6开发项目的时候,事务是我们经常遇到和处理的场景,那么该如何正确的使用事务呢?

第一步:引入Db

use think\facade\Db;

第二步:使用 transaction 方式

Db::transaction(function () {
    Db::table('think_user')->find(1);
    Db::table('think_user')->delete(1);
});

或者是手动控制事务:

// 启动事务
Db::startTrans();
try {
    Db::table('think_user')->find(1);
    Db::table('think_user')->delete(1);
    // 提交事务
    Db::commit();
} catch (\Exception $e) {
    // 回滚事务
    Db::rollback();
}

示例代码:

<?php
namespace app\controller;
use app\BaseController;
//1. 引用Db
use think\facade\Db;
 
class Index extends BaseController
{
  public function index()
  {
    // Transaction 自动事务
    Db::Transaction(function () {
      Db::name('user')->where('id', 19)->save(['price'=>Db::raw('price + 3')]);
      Db::name('user')->where('id', 20)->save(['price'=>Db::raw('price - 3')]);
    });

    // startTrans 手动事务
    Db::startTrans();
    try {
      Db::name('user')->where('id', 19)->save(['price'=>Db::raw('price + 3')]);
      Db::name('user1')->where('id', 20)->save(['price'=>Db::raw('price - 3')]);
      Db::commit();
    } catch (\Exception $e) {
      echo '执行SQL失败,开始回滚数据';
      Db::rollback();
    }
    return json($user);
  }
}

打完收工!

posted @ 2022-08-02 10:58  帅到要去报警  阅读(1119)  评论(0编辑  收藏  举报