laravel - 跨库事务

2020-07-01  本文已影响0人  lemon_jun

在平时工作中 很多时候会碰到 要求数据一致性的场景
这个时候必不可少的 要应用到事务
背景:
朋友用laravel 在开发后台时发现开启事务后并没有生效
在未经过commit() 数据依然存储到了数据库中
查看文档,beginTransaction 不会自动提交
最后他自己发现是跨库导致 在此做个记录

1、laravel事务操作有两种可以选择
1.1、自动 transaction 不需要担心回滚or提交

示例:
 DB::transaction(function () {
    DB::table('users')->update(['votes' => 1]);
    DB::table('posts')->delete();
});

1.2、beginTransaction 手动提交or回滚

DB::beginTransaction();开启事务
DB::rollback(); 回滚
DB::commit(); 提交

2、跨库事务操作
2.1、当你在框架中使用DB::beginTransaction(); 时,开启的是默认配置的数据库,如果想操作另外一个库 需要进行指定

示例:
DB::beginTransaction(); 开启默认数据库事务
DB::connection('test')->beginTransaction(); 开启指定数据库事务

//数据处理流程

if(true)
{
  //提交
  DB::commit();
  DB::connection('test')->commit();
}else{
  //回滚
  DB::rollback();
  DB::connection('test')->rollback();
}

上一篇下一篇

猜你喜欢

热点阅读