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

相关文章

  • PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)

    PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)

    今天接到了一个从Excel内读取图片的需求,这里介绍一下分别使用phpspreadsheet和PHPExcel扩展库来实现读取Excel内图片的功能,感兴趣的朋友一起看看吧
    2019-11-11
  • ThinkPHP5中如何实现模板完全静态化详解

    ThinkPHP5中如何实现模板完全静态化详解

    这篇文章主要为大家介绍了ThinkPHP5中如何实现模板完全静态化详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 使用php显示搜索引擎来的关键词

    使用php显示搜索引擎来的关键词

    在访客从搜索引擎而来的第一个页面上显示访客搜索的关键词,根据这个关键词做出一些提高网站交互能力的改变,比如显示这个关键词相关的其它文章
    2014-02-02
  • 用 Composer构建自己的 PHP 框架之基础准备

    用 Composer构建自己的 PHP 框架之基础准备

    这篇文章主要介绍了用 Composer构建自己的 PHP 框架的基础准备工作,其实就是各种基础知识,想自己搭建php框架的童鞋可要看仔细了
    2014-10-10
  • PHP之图片上传类实例代码(加了缩略图)

    PHP之图片上传类实例代码(加了缩略图)

    下面小编就为大家带来一篇PHP之图片上传类实例代码(加了缩略图)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • thinkphp5+layui实现的分页样式示例

    thinkphp5+layui实现的分页样式示例

    这篇文章主要介绍了thinkphp5+layui实现的分页样式,结合实例形式详细分析了thinkPHP5框架结合layui实现的分页功能相关的配置、查询等操作技巧,需要的朋友可以参考下
    2019-10-10
  • 利用PHPStorm如何开发Laravel应用详解

    利用PHPStorm如何开发Laravel应用详解

    这篇文章主要给大家介绍了关于利用PHPStorm如何开发Laravel应用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习下吧。
    2017-08-08
  • laravel安装和配置教程

    laravel安装和配置教程

    这篇文章主要介绍了laravel安装和配置教程,需要的朋友可以参考下
    2014-10-10
  • 大家在抢红包,程序员在研究红包算法

    大家在抢红包,程序员在研究红包算法

    微信红包在春节的火爆程度不言而喻,广告主投入5亿现金红包,与央视羊年春晚独家合作起到了巨大的推动作用。这就像一针大补丸,在短时间内给微信带来了极大的关注度与流量。下面通过本篇文章学习下抢红包算法是怎样的,小伙伴们快来一起学习吧
    2015-08-08
  • php版微信公众平台实现预约提交后发送email的方法

    php版微信公众平台实现预约提交后发送email的方法

    这篇文章主要介绍了php版微信公众平台实现预约提交后发送email的方法,结合实例形式分析了php微信公众平台邮件发送的相关操作技巧,需要的朋友可以参考下
    2016-09-09

最新评论