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 和 HTML
Oct 09 PHP
php Static关键字实用方法
Jun 04 PHP
PHP Stream_*系列函数
Aug 01 PHP
PHP数据类型的总结分析
Jun 13 PHP
php判断字符串在另一个字符串位置的方法
Feb 27 PHP
9个经典的PHP代码片段分享
Dec 18 PHP
Laravel实现表单提交
May 07 PHP
PHP后台实现微信小程序登录
Aug 03 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 PHP
PHP数组对象与Json转换操作实例分析
Oct 22 PHP
PHP的new static和new self的区别与使用
Nov 27 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 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
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
php 伪静态之IIS篇
2014/06/02 PHP
验证用户是否修改过页面的数据的实现方法
2008/09/26 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
js a标签点击事件
2017/03/30 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
会计专业的自荐信
2013/12/12 职场文书
协议书范本
2014/04/23 职场文书
个人担保书格式范文
2014/05/12 职场文书
公司员工离职感言
2015/08/03 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
ICOM R71E和R72E图文对比解说
2022/04/07 无线电