关于tp6 Thinkphp 6 - 事务操作(自动(transaction) / 手动(startTrans))以下文字资料是由3搜网小编为大家搜集整理后发布的内容,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“tp6 Thinkphp 6 - 事务操作(自动(transaction) / 手动(startTrans))”文章吧。
首页你的数据库引擎必须为 InnoDB 引擎才能使用。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 InnoDB 引擎。
哪个数据表需要事务操作,就更改哪个表的数据库引擎也可以。
表改引擎方法:【数据库表上右键】→【设计表】→【选项】→【引擎】→【InnoDB】
TP6 提供了 3 种事务操作 API:
自动处理:transaction
手动处理:startTrans
分布式事务:我没用过,请查其它资料。
使用的时候注意啊。注意 注意 注意 控制器加载
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();
} 注意在事务操作的时候,确保你的数据库连接使用的是同一个。
可以支持MySQL的XA事务用于实现全局(分布式)事务,你可以使用:
Db::transactionXa(function () {
Db::connect('db1')->table('think_user')->delete(1);
Db::connect('db2')->table('think_user')->delete(1);
}, [Db::connect('db1'),Db::connect('db2')]); 我的使用方法:
use think\facade\Db;
// 启动事务
Db::startTrans();
try {
$data=[];
$moneyinfo = new Students();
$result = $moneyinfo->insertAll($data);
if (!$result) {
throw new \Exception('插入数据失败!');
}
// 提交事务
Db::commit();
return json(['msg'=>'处理成功','status'=>200]);
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return json(['msg'=>'处理失败,'.$e->getMessage(),'status'=>400]);
} 以上就是关于“tp6 Thinkphp 6 - 事务操作(自动(transaction) / 手动(startTrans))”这篇文章的内容,希望分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注3搜网技术频道。


