Laravel项目中DB::transaction事务操作无效怎么回事
Admin 2022-06-30 群英技术资讯 722 次浏览
今天就跟大家聊聊有关“Laravel项目中DB::transaction事务操作无效怎么回事”的内容,可能很多人都不太了解,为了让大家认识和更进一步的了解,小编给大家总结了以下内容,希望这篇“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(); // 指定库,不然都会跑默认配置库的事务
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在thinkphp5中,MVC分层指的是模型层、视图层和控制器层分工合作,逻辑层和表现层进行分开的操作;模型层负责数据库操作,控制器就是一个模块类,根据url进行调度和操作,视图用于连接action控制器和模板文件。
今天小编就为大家分享一篇关于PHP xpath()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
php中使用array_walk_recursive:1、处理二维数组用array_walk_recursive函数,这个函数的作用是对数组中的每个成员递归应用用户函数;2、返回值为如果成功则返回 TRUE,否则返回 FALSE。
我们学习完一个知识再实际运用之后,往往会有新的收获,因此,这篇文章主要带大家回顾php反序列化的相关知识,希望能让大家有收获,下面我们就一起来看看吧。
今天小编就为大家分享一篇关于PHP getNamespaces()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008