怎么在laravel中利用模型执行事务

  介绍

本篇文章给大家分享的是有关怎么在laravel中利用模型执行事务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

laravel是什么

laravel是一套简洁,优雅的PHP Web开发框架。它可以让你从面条一样杂乱的代码中解脱出来,它可以帮你构建一个完美的网络应用,而且每行代码都可以简洁,富于表达力。

<强> 1。官方手册是这样介绍的:

想要在一个数据库事务中运行一连串操作,可以使用DB门面的交易方法,如果事务闭包中抛出异常,事务将会自动回滚。如果闭包执行成功,事务将会自动提交。使用交易方法时不需要担心手动回滚或提交:

DB::事务(function  (), {   ,DB:表(& # 39;用户# 39;)→更新((& # 39;投票# 39;,=祝辞,1]);   ,DB:表(& # 39;文章# 39;)→删除();   });

<强>手动使用事务

如果你想要手动开始事务从而对回滚和提交有一个完整的控制,可以使用DB门面的beginTransaction方法:

DB:: beginTransaction ();

你可以通过回滚方法回滚事务:

DB::回滚();

最后,你可以通过提交方法提交事务:

DB:: commit ();

注意:使用DB门面的事务方法还可以用于控制查询构建器和雄辩的ORM的事务。

<强> 2。具体是这样使用的:

use 阐明\ \外墙\ DB的支持;   ,   public  function  callRevert (Request 美元请求){   美元才能数据(& # 39;call_id& # 39;],=, intval中(美元请求→输入(& # 39;call_id& # 39;));   美元才能数据(& # 39;question_id& # 39;],=, intval中(美元请求→输入(& # 39;question_id& # 39;));   美元才能数据(& # 39;call_name& # 39;],=,美元请求→输入(& # 39;call_name& # 39;);   美元才能数据(& # 39;恢复# 39;],=,htmlspecialchars函数(修剪(美元请求→输入(& # 39;恢复# 39;)));   美元才能列表(& # 39;页面# 39;],=,intval中(美元请求→输入(& # 39;页面# 39;));   美元才能列表(& # 39;type_id& # 39;],=, intval中(美元请求→输入(& # 39;type_id& # 39;));   美元才能列表(& # 39;状态# 39;],=,intval中(美元请求→输入(& # 39;状态# 39;));   时间=美元才能url  http_build_query($列表);=美元才能url 行动(& # 39;家庭\ CallController@callQuestionView& # 39;)强生# 39;? & # 39;$ url;   validator 美元;=,才能验证器:使($ data,数组(& # 39;call_id& # 39;,=祝辞,& # 39;需要# 39;,,& # 39;call_name& # 39;,=祝辞,& # 39;需要# 39;,& # 39;question_id& # 39;=祝辞& # 39;需要# 39;,& # 39;恢复# 39;=祝辞& # 39;需要# 39;));   如果才能(验证器→美元失败()){   ,,FunctionController:错误($ url, & # 39;回复不能为空! & # 39;);   }{其他才能   ,,DB: beginTransaction ();   ,才能尝试{   ,,,FeedbackRevert:插入(元数据);   ,,,FeedbackQuestion::, (& # 39; id # 39; & # 39;=& # 39;, $ data [& # 39; question_id& # 39;])→更新((& # 39;状态# 39;=祝辞1]);   ,,,DB: commit ();   ,,,FunctionController:成功($ url, & # 39;回复成功! & # 39;);   ,,}catch  (\ Exception  $ e), {   ,,,DB:回滚();   ,,,FunctionController:错误($ url, & # 39;回复失败! & # 39;);   ,,}   ,,}   之前,}

注意事务回滚之后会有自增id不会连续比如3、4、5,在5回滚之后再次插入数据会变成3、4、6会跳过为什么呢?

如果你认为自增id不应该被事务化,那么其他事务不得不等待着,检查自增id是被使用还是被回滚,这就导致阻塞

因为innodb的auto_increament的计数器记录的当前值是保存在存内存中的,并不是存在于磁盘上,当mysql

服务器处于运行的时候,这个计数值只会随着插入改增长,不会随着删除而减少。而当mysql服务器

启动时,当我们需要去查询auto_increment计数值时,mysql便会自动执行:从表选择马克斯(id)名

更新;语句来获得当前auto_increment列的最大值,然后将这个值放到auto_increment计数器中,所以就算

滚mysql的auto_increament计数器也不会作负运算

<强>解决办法:可以使用计数()等计数方式插入id(比较麻烦)

以上就是怎么在laravel中利用模型执行事务,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

怎么在laravel中利用模型执行事务