laravel 解决多库下的DB::transaction()事务失效问题

 更新时间:2019年10月21日 11:37:23   作者:小Z笔记  
今天小编就为大家分享一篇laravel 解决多库下的DB::transaction()事务失效问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

问题:最近使用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()事务失效问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Laravel中注册Facades的步骤详解

    Laravel中注册Facades的步骤详解

    这篇文章主要介绍了Laravel中注册Facades的步骤,详细分析了Laravel中注册Facades的原理,实现方法与相关注意事项,需要的朋友可以参考下
    2016-03-03
  • Laravel5.1 框架分页展示实现方法实例分析

    Laravel5.1 框架分页展示实现方法实例分析

    这篇文章主要介绍了Laravel5.1 框架分页展示实现方法,结合实例形式详细分析了laravel5.1框架分页展示逻辑功能实现与使用操作技巧,需要的朋友可以参考下
    2020-01-01
  • Laravel模型事件的实现原理详解

    Laravel模型事件的实现原理详解

    模型事件在 Laravel 的世界中,你对 Eloquent 大多数操作都会或多或少的触发一些模型事件,下面这篇文章主要给大家介绍了关于Laravel模型事件的实现原理,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴。
    2018-03-03
  • phpstudy 进行 composer 全局配置的操作步骤

    phpstudy 进行 composer 全局配置的操作步骤

    使用 phpStudy 进行环境搭建时,有时需要使用 composer 每次都需要查找资料进行配置,在此进行记录笔记,方便有需要的道友借鉴,对phpstudy全局配置composer的操作步骤感兴趣的朋友跟随小编一起看看吧
    2023-08-08
  • 如何使用jQuery+PHP+MySQL来实现一个在线测试项目

    如何使用jQuery+PHP+MySQL来实现一个在线测试项目

    本文将结合实例给大家介绍如何使用jQuery+PHP+MySQL来实现在线测试题,包括动态读取题目,答题完毕后台评分,并返回答题结果。
    2015-04-04
  • TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法

    TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法

    这篇文章主要介绍了TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法,结合实例形式分析了thinkPHP5显示错误信息及行号的相关配置文件与设置修改方法,需要的朋友可以参考下
    2019-06-06
  • PHP生成静态页

    PHP生成静态页

    PHP生成静态页...
    2006-11-11
  • php微信开发之百度天气预报

    php微信开发之百度天气预报

    这篇文章主要为大家详细介绍了php微信开发之百度天气预报的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法

    Laravel框架运行出错提示RuntimeException No application encryption ke

    这篇文章主要介绍了Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法,涉及Laravel框架相关配置、设置与运行操作技巧,需要的朋友可以参考下
    2019-04-04
  • thinkPHP框架单元测试库tpunit用法示例

    thinkPHP框架单元测试库tpunit用法示例

    这篇文章主要介绍了thinkPHP框架单元测试库tpunit用法,结合实例形式分析了tpunit简单使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-08-08

最新评论