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 获取页面中指定内容的实现类
Jan 23 PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
Joomla数据库操作之JFactory::getDBO用法
May 05 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
PHP 芝麻信用接入的注意事项
Dec 01 PHP
PHP实现简单ajax Loading加载功能示例
Dec 28 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
Centos7安装swoole扩展操作示例
Mar 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
PHP中上传大体积文件时需要的设置
2006/10/09 PHP
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
js回调函数仿360开机
2019/12/26 Javascript
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
全球最大的游戏市场:G2A
2018/07/05 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
交通事故赔偿协议书范本
2014/04/15 职场文书
假释思想汇报范文
2014/10/11 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
python中的被动信息搜集
2021/04/29 Python
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
Android 中的类文件和类加载器详情
2022/06/05 Java/Android