本篇文章给大家分享的是有关怎么在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中利用模型执行事务