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 相关文章推荐
ajax+php打造进度条代码[readyState各状态说明]
Apr 12 PHP
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
Mar 09 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
Yii框架常见缓存应用实例小结
Sep 09 PHP
PHP使用非对称加密算法RSA
Apr 21 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
浅谈thinkphp的实例化模型
2015/01/04 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
python逆序打印各位数字的方法
2018/06/25 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
火锅店创业计划书范文
2014/02/02 职场文书
离婚协议书样本
2015/01/26 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
500字作文之周记
2019/12/13 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS