优点:在项目中对多表关联的数据一次性添加的情景中非常实用
实例:如A表为主表,B、C两表为A表的子表。在实际开发中,业务逻辑需要再添加A表的同时添加B、C两表的关联数据。
主要问题:如果A表(即主表)添加成功,而B、C两表添加数据失败,会造成整体数据结构不完整有错的情况
代码(tp5):
$result = true; // 定义事务初始态
Db::startTrans(); // 开始事务
try {
if () {
// 以下为逻辑代码
} else {
// 主动抛出异常
throw new Exception('数据添加失败!');
}
// 其他异常也可以想上篇代码抛出
// 如所有逻辑在执行中都没有异常则提交事务
Db::commit();
} catch (\Exception $e) {
$result = false; // 事务状态更改为回滚
Db::rollback(); // 事务回滚
}
// 判断事务结果并返回前端
if ($result) {
$this->success('添加成功!');
} else {
// 事务失败的情况下,把接受到的异常捕捉后返回前端
$this->error($e->getMessage());
}
总结:项目中的事务很常用,使用事务可以保证数据的完整性。