laravel 解决多库下的DB::transaction()事务失效问题


Posted in PHP onOctober 21, 2019

问题:最近使用laravel的DB::transaction()方法进行事务操作时,发现事务总是无效的。代码如下:

DB::transaction(function () use ($uid, $roleId) {
 RoomUserRole::insert([
  'uid' => $uid,
  'role_id' => $roleId,
  'created_at' => LARAVEL_START,
  'updated_at' => LARAVEL_START
 ]);

 RoomUserRoleLog::insert([
  'uid' => $uid,
  'handle_type' => 1,
  'admin_uid' => Auth::user()->id,
  'created_at' => LARAVEL_START,
  'updated_at' => LARAVEL_START
 ]);

});

以上mysql 第二句会报错抛出一个异常, 查看数据库时第一句依然出入成功。查看laravel的DB::transaction()的使用

原因以及解决方法:

项目使用多个数据库配置,DB::transaction()使用的是默认库的事务操作。所以要指定哪个数据库的事务,以上代码调整:

DB::connection('mysql2')->transaction(function () use ($uid, $roleId) {
 RoomUserRole::insert([
  'uid' => $uid,
  'role_id' => $roleId,
  'created_at' => LARAVEL_START,
  'updated_at' => LARAVEL_START
 ]);

 RoomUserRoleLog::insert([
  'uid' => $uid,
  'handle_type' => 1,
  'admin_uid' => Auth::user()->id,
  'created_at' => LARAVEL_START,
  'updated_at' => LARAVEL_START
 ]);

}); // 这样你会发现事务才正常回滚

同样

DB::connection('mysql_chat_room')->beginTransaction();
DB::connection('mysql_chat_room')->commit();
DB::connection('mysql_chat_room')->rollBack(); // 指定库,不然都会跑默认配置库的事务

以上这篇laravel 解决多库下的DB::transaction()事务失效问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP模板引擎SMARTY
Oct 09 PHP
破解图片防盗链的代码(asp/php)测试通过
Jul 02 PHP
php做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
PHP中模拟处理HTTP PUT请求的例子
Jul 22 PHP
php强制运行广告的方法
Dec 01 PHP
php+mysql数据库查询实例
Jan 21 PHP
PHP中常见的缓存技术实例分析
Sep 23 PHP
8个必备的PHP功能开发
Oct 02 PHP
ThinkPHP实现更新数据实例详解(demo)
Jun 29 PHP
Laravel 队列使用的实现
Jan 08 PHP
php设计模式之装饰模式应用案例详解
Jun 17 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
Mar 09 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 #PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 #PHP
PHP常用函数之格式化时间操作示例
Oct 21 #PHP
PHP常用函数之base64图片上传功能详解
Oct 21 #PHP
laravel5 Eloquent 实现事务方式
Oct 21 #PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 #PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 #PHP
You might like
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
php轻松实现文件上传功能
2016/03/03 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
document.all与WEB标准
2020/05/13 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
一步步解析Python斗牛游戏的概率
2016/02/12 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
python实现石头剪刀布程序
2021/01/20 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
Python telnet登陆功能实现代码
2020/04/16 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
linux面试题参考答案(7)
2012/10/29 面试题
工伤事故赔偿协议书
2014/10/27 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
检讨书范文
2015/01/27 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书