Laravel 中使用事务
1、transaction 方法
DB::transaction(function () {DB::table('users')->update(['id' => 1]);DB::table('posts')->delete();
});
2、手动提交
DB::beginTransaction();
你也可以通过 rollBack 方法来还原事务:DB::rollBack();
最后,可以通过 commit 方法来提交这个事务:DB::commit();
3、 Eloquent ORM中使用事务
public function menuDel($id){$menu = WechatMenu::find($id);if ($menu["pid"] == 0) {DB::beginTransaction();try {WechatMenu::where('pid', $id)->delete();WechatMenu::where('id', $id)->delete();DB::commit();} catch (QueryException $exception) {DB::rollback();return redirect(route("wechat.menu"))->with('status', 'success')->withErrors(["操作失败!"]);}return redirect(route("wechat.menu"))->with('status', 'success')->withErrors(["操作成功!"]);} else {if (WechatMenu::where('id', $id)->delete()) {return redirect(route("wechat.menu"))->with('status', 'success')->withErrors(["操作成功!"]);} else {return redirect(route("wechat.menu"))->with('status', 'error')->withErrors(["操作失败!"]);}}}
<?phpnamespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Database\QueryException;
use App\Wiki;
class TestController extends Controller {//用DB facade的事务方法控制 查询语句构建器的事务public function storeWiki(Request $request) {DB::beginTransaction();try {$tagIds = explode(',', $request->get('tag_id'));$wiki_id = DB::table('wiki')->insertGetId(['title' => $request->get('title') , 'content' => $request->get('content') ]);$relationData = [];foreach ($tagIds as $tagId) {$data = ['wiki_id' => $wiki_id, 'tag_id' => $tagId];$relationData[] = $data;}DB::table('wiki_tag_rel')->insert($relationData);DB::commit();}catch(\Illuminate\Database\QueryException $ex) {DB::rollback();return \Response::json(['status' => 'error', 'error_msg' => 'Failed, please contact supervisor']);}return \Response::json(['status' => 'ok']);}//用DB facade的事务方法控制 Eloquent ORM的事务public function createWiki(array $data) {DB::beginTransaction();try {$tagIds = explode(',', $data['tag_id']);$newWiki = Wiki::create(['title' => $data['title'], 'content' => $data['content']]);//Wiki和Tag两个Model使用了belongsToMany建立了多对多的关系//通过attach方法来附加wiki和tag的关系(写入中间表)$newWiki->tags()->attach($tagIds);DB::commit();}catch(QueryException $ex) {DB::rollback();return \Response::json(['status' => 'error', 'error_msg' => 'Failed, please contact supervisor']);}return \Response::json(['status' => 'ok']);}
}
参考了网上部分代码
Laravel 中使用事务相关推荐
- 在Laravel中使用数据库事务以及捕获事务失败后的异常
Description 在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法.如果在事务的闭包内抛出异常,事务将会被自动还原.如果闭包运 ...
- Laravel中Redis的配置和使用
引入redis composer require predis/predis 会在composer.json中引入最新版本的predis composer update 把下载predis 库加入到v ...
- Redis初学:14(Redis中的事务)
Redis中的事务 Redis的事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. Redis事务的主 ...
- Laravel 中简约而不简单的 Macroable 宏指令
百度百科的定义: 计算机科学里的宏(Macro),是一种批量处理的称谓.一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是 ...
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...
- mysql sql 事务写作_mysql中的事务
MySQL事务相关 一. 什么是事务 事务(Transaction)是一个逻辑序列,该序列要么执行,要么不执行. 例如:转换业务 A 给 B 转账 1000 元,设计两个操作: A减少1000元 B增 ...
- MySQL数据库中默认事务隔离级别是?
MySQL数据库中默认事务隔离级别是? 事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到 ...
- springboot事务回滚源码_Spring Boot中的事务是如何实现的
1. 概述 一直在用SpringBoot中的@Transactional来做事务管理,但是很少想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事 ...
- Spring中的事务管理详解
在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...
最新文章
- 基于计算机视觉的构件表面缺陷特征提取
- 使用request实现网站中的注册功能
- 《精通Nginx》——2.3 使用include文件
- CentOS 6.5 伪分布安装
- Github 本周最有趣的 10 款「机器学习」开源项目 | PaperDaily #32
- 每日程序C语言32-取一个整数从右端开始的4-7位
- AceTeamwork 软件成就继续蝉联国内最优秀的项目工时(timesheet)及费用报销(expense)软件...
- EGLSurfaces 和 OpenGL ES
- 根据不同条件查询_刑事立案要符合哪些条件,怎么查看立案没有
- OpenShift 4 - 利用 File Integrity Operator 实现对集群节点进行入侵检测
- ecplise git修改提交信息_Git提交信息规范化
- php留言板显示不出,php留言板源代码_php留言代码留言后显示乱码
- ASP.NET读取POP3邮件的操作
- 我的第一次随笔——胡桂玲
- linux内核之中断和异常
- 蓝牙精确定位技术下的化工厂安全管理系统,蓝牙定位标签-新导智能
- IEEE Access 期刊投稿
- PMP之四个敏捷会议
- 文件在计算机被锁定怎么打开方式,4种删除锁定文件的方法
- PDF文件阅读器可转word...
热门文章
- mysql 5.7.6 5.7.19_免编译安装mysql 5.7.19
- github使用总结
- leetcode mysql 排名_GitHub - nimphy/leetcode-Mysql
- JAVA中String类以形参传递到函数里面,修改后外面引用不能获取到更改后的值
- Kubernetes 版本锁定到1.12.3
- PyCharm编辑界面提示
- Win8 Metro(C#)数字图像处理--2.50图像运动模糊
- Linux运维之道之ENGINEER1.3(配置SMB共享,配置NFS共享)
- 安装Cocoapods,以及其中出现的问题
- eclipse/MyEclipse 日期格式、注释日期格式、时区问题[转]