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生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
zen cart新进商品的随机排序修改方法
Sep 10 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 PHP
php关联数组快速排序的方法
Apr 17 PHP
CodeIgniter常用知识点小结
May 26 PHP
php实现的http请求封装示例
Nov 08 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 PHP
PHP观察者模式定义与用法实例分析
Mar 22 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 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 静态页面中显示动态内容
2009/08/14 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
2013/11/26 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
vue-cli3全面配置详解
2018/11/14 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python函数式编程指南(四):生成器详解
2015/06/24 Python
分享Python文本生成二维码实例
2016/01/06 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
电子商务专业个人的自我评价
2013/12/19 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
车队安全员岗位职责
2015/02/15 职场文书
审美与表现自我评价
2015/03/09 职场文书
呐喊读书笔记
2015/06/30 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
门面租赁合同范文
2019/08/06 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书