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 相关文章推荐
Win9x/ME下Apache+PHP安装配置
Oct 09 PHP
实时抓取YAHOO股票报价的代码
Oct 09 PHP
php 正则匹配函数体
Aug 25 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
win7计划任务定时执行PHP脚本设置图解
May 09 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
thinkphp配置文件路径的实现方法
Aug 30 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
在laravel中实现事务回滚的方法
Oct 10 PHP
Laravel登录失败次数限制的实现方法
Aug 26 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读取和编写XML DOM的实现代码
2011/02/03 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
PHP处理会话函数大总结
2015/08/05 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
JavaScript 乱码问题
2009/08/06 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
使用Python编写Linux系统守护进程实例
2015/02/03 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Python 加密与解密小结
2018/12/06 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
python logging模块的使用总结
2019/07/09 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
三八活动策划方案
2014/08/17 职场文书
安全承诺书
2015/01/19 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫