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 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
Jan 30 PHP
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
CI框架Session.php源码分析
Nov 03 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
php异常处理方法实例汇总
Jun 24 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
May 07 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 PHP
关于PHP中interface的用处详解
Jul 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代码审核的详细介绍
2013/06/13 PHP
重新认识php array_merge函数
2014/08/31 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
php实现文件预览功能
2017/05/23 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
简介JavaScript中search()方法的使用
2015/06/06 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
AngularJS 最常用的八种功能(基础知识)
2017/06/26 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
浅析python中while循环和for循环
2019/11/19 Python
python实现滑雪游戏
2020/02/22 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
高中生毕业自我鉴定
2013/10/10 职场文书
大学毕业生通用自荐信范文
2013/10/31 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS