Thinkphp 6 - 数据库事务、分布式事务、模型使用事务、跨数据库事务(详细的使用实例,可直接复制用于您的项目中去)

一、简单的事务,单个数据库

/*** 普通事务* return json*/
public function demo01(){// 开启事务Db::startTrans();try{// 添加数据Db::table('article') -> insert(['title' => '测试事务']);Db::commit();return json(['error_code' => 0,'msg' => 'success']);}catch (\Exception $e){Db::rollback();return json(['error_code' => 400,'msg' => $e ->getMessage()]);}
}

二、使用分库分表,多个数据库

/*** 分库事务* return json*/
public function demo02(){// 开启默认数据库的事务Db::startTrans();// 开启指定的数据库 数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集Db::connect('mysql://root:root@127.0.0.1:3306/laravel#utf8') -> startTrans();try{// 插入数据Db::table('article') -> insert(['title' => '分布式回滚']);Db::connect('mysql://root:root@127.0.0.1:3306/laravel#utf8')-> table('shop_order')-> insert(['order_number' => date('YmdHis')]);// 提交Db::commit();Db::connect('mysql://root:root@127.0.0.1:3306/laravel#utf8') -> commit();return json(['error_code' => 0,'msg' => 'success']);}catch (\Exception $e){// 回滚Db::rollback();Db::connect('mysql://root:root@127.0.0.1:3306/laravel#utf8') -> rollback();return json(['error_code' => 400,'msg' => $e -> getMessage()]);}
}

三、使用模型事务

<?php
/*** Created by PhpStorm.* User: Administrator* Date: 2019/10/6* Time: 11:20*/namespace app\index\model;use think\Model;class OrderModel extends Model {// 绑定表protected $table = 'shop_order';设置当前模型的数据库连接//protected $connection = [//    // 数据库类型//    'type'        => 'mysql',//    // 服务器地址//    'hostname'    => '127.0.0.1',//    // 数据库名//    'database'    => 'laravel',//    // 数据库用户名//    'username'    => 'root',//    // 数据库密码//    'password'    => 'root',//    // 数据库编码默认采用utf8//    'charset'     => 'utf8',//    // 数据库表前缀//    'prefix'      => '',//    // 数据库调试模式//    'debug'       => false,//];public function __construct($data = []){// 这样可以动态更改模型的数据库连接 可以使用不同的数据$this -> connection = [// 数据库类型'type'        => 'mysql',// 服务器地址'hostname'    => '127.0.0.1',// 数据库名'database'    => 'laravel',// 数据库用户名'username'    => 'root',// 数据库密码'password'    => 'root',// 数据库编码默认采用utf8'charset'     => 'utf8',// 数据库表前缀'prefix'      => '',// 数据库调试模式'debug'       => false,];parent::__construct($data);}
}
<?php
/*** Created by PhpStorm.* User: Administrator* Date: 2019/10/6* Time: 11:20*/namespace app\index\model;use think\Model;class DetailModel extends Model {// 绑定表protected $table = 'shop_detail';设置当前模型的数据库连接//protected $connection = [//    // 数据库类型//    'type'        => 'mysql',//    // 服务器地址//    'hostname'    => '127.0.0.1',//    // 数据库名//    'database'    => 'laravel',//    // 数据库用户名//    'username'    => 'root',//    // 数据库密码//    'password'    => 'root',//    // 数据库编码默认采用utf8//    'charset'     => 'utf8',//    // 数据库表前缀//    'prefix'      => '',//    // 数据库调试模式//    'debug'       => false,//];public function __construct($data = []){$this -> connection = [// 数据库类型'type'        => 'mysql',// 服务器地址'hostname'    => '127.0.0.1',// 数据库名'database'    => 'laravel',// 数据库用户名'username'    => 'root',// 数据库密码'password'    => 'root',// 数据库编码默认采用utf8'charset'     => 'utf8',// 数据库表前缀'prefix'      => '',// 数据库调试模式'debug'       => false,];parent::__construct($data);}
}
/*** 分布式事务 使用模型 多个模型 只需一个模型开启事务即可* return json*/
public function demo03(){// 开启事务 多个模型 只需要开启一个即可$orderModel = new OrderModel;$orderModel -> startTrans();try{$detailModel = new DetailModel;// 新增数据$orderModel -> order_number = date('YmdHis');$orderModel -> save();// throw new Exception('回滚');// 新增数据$detailModel -> detail = time();$detailModel -> save();// 提交事务$orderModel -> commit();return json(['error_code' => 0,'msg' => 'success',]);}catch (\Exception $e){// 事务回滚$orderModel -> rollback();return json(['error_code' => 400,'msg' => $e -> getMessage()]);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨界电商、游戏技与代理IP的关联

在当今数字化时代&#xff0c;跨界电商与游戏技术的迅速发展为商业与娱乐带来了无限可能。然而&#xff0c;随着互联网的普及&#xff0c;网络安全问题也日益突出。在这个背景下&#xff0c;我们不得不重新审视代理IP与出海、socks5代理等技术之间的联系&#xff0c;以及它们对…

掘根宝典之C语言文件操作(fgetc,fputc,fscanf,fprintf,fread,fwrite,feek,ftell,fwind,feof)

1. 为什么使⽤⽂件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失 了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久…

【C/C++】结构体内存对齐 ----- 面试必考(超详细解析,小白一看就懂!!!)

目录 一、前言 二、引出 ---- 结构体内存对齐 &#x1f34e;结构体偏移量计算&#xff1a;offsetof &#x1f95d;结构体内存对齐详解 &#x1f4a6;规则介绍&#xff08;重点&#xff01;&#xff01;&#xff09; &#x1f4a6;例题解析 三、习题演练 &#x1f34d;练习① …

Spring Cloud 面试题及答案整理,最新面试题

Spring Cloud中断路器的原理及其作用是什么&#xff1f; Spring Cloud断路器的原理和作用基于以下几个关键点&#xff1a; 1、故障隔离机制&#xff1a; 在微服务架构中&#xff0c;断路器作为一种故障隔离机制&#xff0c;当某个服务实例出现问题时&#xff0c;断路器会“断…

Docker知识点总结二

四、 Docker 架构 Docker使用客户端-服务器(C/S)架构模式&#xff0c;使用远程API来管理和创建Docker容器。 介绍&#xff1a; 1、Docker的客户端client&#xff0c;我们在命令行发送一些信息(命令)给Docker服务端。2、中间这个就是Docker的服务端&#xff0c;在这个服务端里面…

漫步者、南卡、Cleer开放式耳机怎么样?硬核对比测评性能强者!

​在当今市场上&#xff0c;开放式耳机的型号层出不穷&#xff0c;作为一名专业的测评博主&#xff0c;我对这类产品有着深入的了解和丰富的经验。最近&#xff0c;我的粉丝们通过私信向我咨询如何选择适合自己的开放式耳机&#xff0c;面对众多品牌的选择&#xff0c;他们感到…

【Unity】使用ScriptableObject存储数据

1.为什么要用ScriptableObject&#xff1f; 在游戏开发中&#xff0c;有大量的配置数据需要存储&#xff0c;这个时候就需要ScriptableObject来存储数据了。 很多人会说我可以用json、xml、txt&#xff0c;excel等等 但是你们有没有想过&#xff0c;假设你使用的是json&#x…

【Linux基础(一)】设备和文件IO

学习分享 1、Linux中的设备管理1.1、设备管理的特点1.2、设备分类1.3、设备工作原理1.4、Linux设备操作1.5、系统调用和系统API等区别 2、文件IO2.1、C库的文件操作2.2、文件描述符2.3、特殊文件描述符2.4、系统调用2.4.1、open系统调用4-12.4.2、open系统调用4-22.4.3、write系…

每日一题 2917找出数组中的K-OR值

2917. 找出数组中的 K-or 值 题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数&#xff1a; 只有在 nums 中&#xff0c;至少存在 k 个元素的第 i 位值为 1 &#xff0c;那么 K-or 中的第 i 位的值…

爬虫实战——伯克利新闻【内附超详细教程,你上你也行】

文章目录 发现宝藏一、 目标二、简单分析网页1. 寻找所有新闻2. 分析模块、版面和文章 三、爬取新闻1. 爬取模块2. 爬取版面3. 爬取文章 四、完整代码五、效果展示 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

2023年扫地机器人行业分析报告(2024年扫地机器人行业未来趋势分析)

当前&#xff0c;随着人们生活水平的提高&#xff0c;扫地机器人因为操作简单、使用方便而越来越多地走入了人们的生活&#xff0c;成为清洁电器中的重要一员&#xff0c;深受消费者欢迎。 伴随科技水平的进步&#xff0c;当前的扫地机器人已经具备了高度智能化的功能&#xf…

C++_位图

目录 1、位图的使用 2、位图实现 3、位图与哈希表的区别 4、位图的应用 结语 前言&#xff1a; 位图采用的是哈希表的思想&#xff0c;哈希表的映射层面是在字节上&#xff0c;而位图的映射层面就是在bit位上。由于bit位所能展现的信息无非只有‘1’和‘0’&#xff0c;所…

【Apple Vision Pro应用源码】Vision Pro吸尘器项目源代码

超级有趣Vision Pro 应用 吸尘器项目 这是一个非常有趣的 Vision Pro项目&#xff0c;会让孩子们爱上打扫卫生。 在这里我展示了如何使用 ARKit&#xff1a;头部跟踪、手部跟踪、场景理解加载和播放声音进程冲突使用 MTLBuffers 处理底层网格数据 项目源代码&#xff1a;Git…

动态规划(算法竞赛、蓝桥杯)--状态压缩DP蒙德里安的梦想

1、B站视频链接&#xff1a;E31 状态压缩DP 蒙德里安的梦想_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N12,M1<<N; bool st[N];//st[i]存储合并列的状态i是否合法 long long f[N][M];//f[i][j]表示摆放第i列&#xff0c;状态为…

java-ssm-jsp-大学社团管理系统

java-ssm-jsp-大学社团管理系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

代码随想录算法训练营第21天

455. 分发饼干 class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:g.sort(reverseTrue)s.sort(reverseTrue)j 0for i in range(len(g)):if j < len(s)-1 and s[j] >g[i]:j 1return j 376. 摆动序列 class Solution:def wiggleMax…

CMake Error: Cannot open file for write

CMake Error: : System Error: Permission denied CMake Error: Directory Information file not found CMake Error: : System Error: Permission denied 当前用户没有足够的权限来写入指定的文件或目录在Linux系统中&#xff0c;文件或目录的权限由三组用户&#xff08;所…

HA集群脑裂现象的处理-一起学习吧之架构

HA集群在提高系统可用性和数据安全性方面具有显著优势&#xff0c;但同时也需要投入更多的成本和资源&#xff0c;并面临一定的复杂性和挑战。其中&#xff0c;脑裂现象对HA集群产生的影响如果未妥善处理&#xff0c;将带来灾难性后果。 一、脑裂现象 HA&#xff08;High Ava…

PSINS工具箱笔记——函数定义

绘图函数&#xff1a; 时间进度条&#xff1a; timebar&#xff08;用起来简单&#xff09; 姿态转换&#xff1a; 欧拉角、姿态矩阵、等效旋转矩阵、姿态四元数、运载火箭使用的欧拉角之间的转换。 轨迹生成&#xff1a; seg trjsegment(seg, segtype, lasting, w, a, var…

在C++中使用volatile关键字

基本概念 volatile 关键字在C中用于告诉编译器&#xff0c;一个变量的值可能以程序未明确指定的方式被改变。使用 volatile 声明的变量&#xff0c;编译器在每次访问时都会重新从其所在的内存位置读取其值&#xff0c;而不是使用保存在寄存器中的副本。这对于多线程程序中共享…