在使用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);
}
}
打完收工!