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 中使用事务相关推荐

  1. 在Laravel中使用数据库事务以及捕获事务失败后的异常

    Description 在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法.如果在事务的闭包内抛出异常,事务将会被自动还原.如果闭包运 ...

  2. Laravel中Redis的配置和使用

    引入redis composer require predis/predis 会在composer.json中引入最新版本的predis composer update 把下载predis 库加入到v ...

  3. Redis初学:14(Redis中的事务)

    Redis中的事务 Redis的事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. Redis事务的主 ...

  4. Laravel 中简约而不简单的 Macroable 宏指令

    百度百科的定义: 计算机科学里的宏(Macro),是一种批量处理的称谓.一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是 ...

  5. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  6. mysql sql 事务写作_mysql中的事务

    MySQL事务相关 一. 什么是事务 事务(Transaction)是一个逻辑序列,该序列要么执行,要么不执行. 例如:转换业务 A 给 B 转账 1000 元,设计两个操作: A减少1000元 B增 ...

  7. MySQL数据库中默认事务隔离级别是?

    MySQL数据库中默认事务隔离级别是? 事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到 ...

  8. springboot事务回滚源码_Spring Boot中的事务是如何实现的

    1. 概述 一直在用SpringBoot中的@Transactional来做事务管理,但是很少想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事 ...

  9. Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

最新文章

  1. 基于计算机视觉的构件表面缺陷特征提取
  2. 使用request实现网站中的注册功能
  3. 《精通Nginx》——2.3 使用include文件
  4. CentOS 6.5 伪分布安装
  5. Github 本周最有趣的 10 款「机器学习」开源项目 | PaperDaily #32
  6. 每日程序C语言32-取一个整数从右端开始的4-7位
  7. AceTeamwork 软件成就继续蝉联国内最优秀的项目工时(timesheet)及费用报销(expense)软件...
  8. EGLSurfaces 和 OpenGL ES
  9. 根据不同条件查询_刑事立案要符合哪些条件,怎么查看立案没有
  10. OpenShift 4 - 利用 File Integrity Operator 实现对集群节点进行入侵检测
  11. ecplise git修改提交信息_Git提交信息规范化
  12. php留言板显示不出,php留言板源代码_php留言代码留言后显示乱码
  13. ASP.NET读取POP3邮件的操作
  14. 我的第一次随笔——胡桂玲
  15. linux内核之中断和异常
  16. 蓝牙精确定位技术下的化工厂安全管理系统,蓝牙定位标签-新导智能
  17. IEEE Access 期刊投稿
  18. PMP之四个敏捷会议
  19. 文件在计算机被锁定怎么打开方式,4种删除锁定文件的方法
  20. PDF文件阅读器可转word...

热门文章

  1. mysql 5.7.6 5.7.19_免编译安装mysql 5.7.19
  2. github使用总结
  3. leetcode mysql 排名_GitHub - nimphy/leetcode-Mysql
  4. JAVA中String类以形参传递到函数里面,修改后外面引用不能获取到更改后的值
  5. Kubernetes 版本锁定到1.12.3
  6. PyCharm编辑界面提示
  7. Win8 Metro(C#)数字图像处理--2.50图像运动模糊
  8. Linux运维之道之ENGINEER1.3(配置SMB共享,配置NFS共享)
  9. 安装Cocoapods,以及其中出现的问题
  10. eclipse/MyEclipse 日期格式、注释日期格式、时区问题[转]