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 相关文章推荐
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
PHP得到mssql的存储过程的输出参数功能实现
Nov 23 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
PHP静态文件生成类实例
Nov 29 PHP
PHP开发Apache服务器配置
Jul 15 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
PHP验证码生成原理和实现
Jan 24 PHP
thinkphp 手机号和用户名同时登录
Jan 20 PHP
PHP面向对象之工作单元(实例讲解)
Jun 26 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
Jun 05 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 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下MAIL的另一解决方案
2006/10/09 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
animation和transition的区别
2020/10/12 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
党员活动日总结
2014/05/05 职场文书
信访工作经验交流材料
2014/05/23 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
初中思品教学反思
2016/02/20 职场文书