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
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
php标签云的实现代码
Oct 10 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
PHP入门经历和学习过程分享
Apr 11 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
php的curl封装类用法实例
Nov 07 PHP
标准PHP的AES加密算法类
Mar 12 PHP
php PDO判断连接是否可用的实现方法
Apr 03 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
Jul 20 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
ftp类(example.php)
2006/10/09 PHP
PHP 学习路线与时间表
2010/02/21 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
PHP中串行化用法示例
2016/11/16 PHP
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
React props和state属性的具体使用方法
2018/04/12 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
vue实现扫码功能
2020/01/17 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
Python 字典(Dictionary)操作详解
2014/03/11 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
应届生找工作求职信
2014/06/24 职场文书
学用政策心得体会
2014/09/10 职场文书
工作表扬信范文
2015/01/17 职场文书
大足石刻导游词
2015/02/02 职场文书
赞美教师的句子
2019/09/02 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
python ConfigParser库的使用及遇到的坑
2022/02/12 Python
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python