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中::、->、self、$this几种操作符的区别介绍
Apr 24 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
php共享内存段示例分享
Jan 20 PHP
php初始化对象和析构函数的简单实例
Mar 11 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
PHP中使用asort进行中文排序失效的问题处理
Aug 18 PHP
PHP中预定义的6种接口介绍
May 12 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
Feb 17 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 PHP
PHP控制循环操作的时间
Apr 01 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存储过程调用实例代码
2013/02/03 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python实例之wxpython中Frame使用方法
2014/06/09 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
django中的setting最佳配置小结
2017/11/21 Python
python正则表达式之对号入座篇
2018/07/24 Python
Python文件路径名的操作方法
2019/10/30 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
军训感想500字
2014/02/20 职场文书
亮化工程实施方案
2014/03/17 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
教师业务学习材料
2014/12/16 职场文书
长城英文导游词
2015/01/30 职场文书
《搭石》教学反思
2016/02/18 职场文书