• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

Thinkphp6—开启事务

Data: 2020-09-26 03:07:38Form: JournalClick: 12

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

第一步:引入Db

use think\facade\Db;


第二步:使用 transaction 方式

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


或者是手动控制事务:

<?php
// 启动事务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. 引用Dbuse 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);
    }
}

打完收工!

Name:
<提交>