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入门
Oct 09 PHP
PHP的分页功能
Mar 21 PHP
discuz7 phpMysql操作类
Jun 21 PHP
PHP中MVC模式的模板引擎开发经验分享
Mar 23 PHP
PHPMYADMIN导入数据最大为2M的解决方法
Apr 23 PHP
php中OR与|| AND与&&的区别总结
Oct 26 PHP
Java和PHP在Web开发方面对比分析
Mar 01 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
Mar 19 PHP
两种php实现图片上传的方法
Jan 22 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 PHP
php的单例模式及应用场景详解
Feb 27 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 fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
python使用psutil模块获取系统状态
2016/08/27 Python
python3爬虫之设计签名小程序
2018/06/19 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
体育专业个人的求职信范文
2013/09/21 职场文书
2014年健康教育实施方案
2014/02/17 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
珍爱生命主题班会
2015/08/13 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
python自动化之如何利用allure生成测试报告
2021/05/02 Python
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript