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中在数据库中保存Checkbox数据(1)
Oct 09 PHP
ajax 的post方法实例(带循环)
Jul 04 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
Mar 06 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
Dec 18 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
Laravel如何友好的修改.env配置文件详解
Jun 07 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
Jun 21 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 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高手?学会“懒惰”的编程
2006/12/05 PHP
php的urlencode()URL编码函数浅析
2011/08/09 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
vue3.0 上手体验
2020/09/21 Javascript
使用js原生实现年份轮播选择效果实例
2021/01/12 Javascript
Python continue语句用法实例
2014/03/11 Python
Python实现获取网站PR及百度权重
2015/01/21 Python
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
使用python绘制常用的图表
2016/08/27 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
python实现kmp算法的实例代码
2019/04/03 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
python爬虫要用到的库总结
2020/07/28 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
美国零售商店:Blue&Cream
2017/04/07 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
财政局长自荐信范文
2013/12/22 职场文书
初中优秀学生评语
2014/12/29 职场文书
初一语文教学反思
2016/03/03 职场文书
MySQL开启事务的方式
2021/06/26 MySQL
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL