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 学习资料零碎东西
Dec 04 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
PHP中preg_match函数正则匹配的字符串长度问题
May 27 PHP
浅谈COOKIE和SESSION区别
Jul 19 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
PHP正则获取页面所有图片地址
Mar 23 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
Jun 22 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 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中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
javascript AutoScroller 函数类
2009/05/29 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
python解析xml文件操作实例
2014/10/05 Python
Python编程中的反模式实例分析
2014/12/08 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
python机器人运动范围问题的解答
2019/04/29 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
个人自我评价和职业目标
2014/01/24 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
普通党员个人整改措施
2014/10/27 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书
升学宴祝酒词
2015/08/11 职场文书
关于运动会的广播稿
2015/08/19 职场文书
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python