我们在进行一些业务逻辑的时候,难免会出现批量操作的问题,特别是批量修改操作,如果数据量大,总会考虑到批量修改到一半怎么办?所以如果使用事务来进行批量操作就会好很多,直接看代码:

  1. public function edit(){
  2. if(!IS_POST)die;
  3. $data = I('post.');
  4. $columDB = D('Column');
  5. $id = I('post.id','','intval');
  6. $mid = I('post.mid','','intval');
  7. $name = strtolower(I('post.name','','trim'));
  8. $pid = I('post.pid','','intval');
  9. //$savepid = $columDB->where(array('id'=>$id))->getField('pid');
  10. // $model_name = M('admin_model')->where(array('id'=>$mid))->getField('table_name');
  11. $data['url'] = $name.'/';
  12. $data['updatetime'] = time();
  13. // if(!$pid){
  14. // $data['url'] = strtolower($model_name).'/index.html';
  15. // };
  16. // 顶级栏目用的是 index 方法
  17. $return = array();
  18. $return['code'] = 1;
  19. $return['msg'] = '修改成功';
  20. // 修改栏目的时候 如果修改过栏目的标识 需要修改当前栏目下的所有文章的链接
  21. $cateInfo = $columDB->find($id);
  22. $error=[]; // 记录失败ID
  23. if($name != $cateInfo['name']){
  24. $document = M('document');
  25. $list = $document->where(array('cid'=>$id))->select();
  26. // 开启事务
  27. $document->startTrans();
  28. foreach($list as $k=>$v){
  29. // setField('value', $val);
  30. $isRight = $document->where(array('id'=>$v['id']))->setField('url',$name.'/'.$v['id'].'.html');
  31. if(!$isRight){
  32. $error[] = $isRight;
  33. };
  34. };
  35. if(count($error)){
  36. $document->rollback();
  37. $return['code'] = 0;
  38. $return['msg'] = '修改栏目文章链接失败';
  39. exit(json_encode($return));
  40. };
  41. $document->commit();
  42. };
  43. if(!$columDB->create($data)){
  44. $return['code'] = 0;
  45. $return['msg'] = $columDB->getError();
  46. exit(json_encode($return));
  47. };
  48. // 开启事务
  49. $columDB->startTrans();
  50. $resID = $columDB->save();
  51. if(!$resID && $resID != 0){
  52. // 回滚
  53. $columDB->rollback();
  54. $return['code'] = 0;
  55. $return['msg'] = '修改失败';
  56. };
  57. $columDB->commit();
  58. // if(!$resID && $resID != 0){
  59. // $return['code'] = 0;
  60. // $return['msg'] = '修改失败';
  61. // };
  62. $return['id'] = $resID;
  63. exit(json_encode($return));
  64. }

  

thinkphp---用事务处理批量操作的更多相关文章

  1. 分布式缓存Redis集群配置使用

    Redis 简介          redis是一种开源的.基于内存的.可持久化的.高性能的Key-Value数据存储系统. redis能做什么? 持久化存储  高速缓存 消息中间件         ...

  2. thinkphp事务处理以及无效时的解决方案(整理)

    thinkphp事务处理以及无效时的解决方案(整理) 一.总结 一句话总结:要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql 1.InnoDB和MyISAM对事务的支持怎么样? I ...

  3. ThinkPHP实现事务回滚示例代码(附加:PDO的事务处理)

    ThinkPHP的事务回滚示例如下: $m=D('YourModel');//或者是M(); $m2=D('YouModel2'); $m->startTrans();//在第一个模型里启用就可 ...

  4. ThinkPHP 事务处理 (事务回滚) 、异常处理

    $tran_result = true;                $trans = M();                $trans->startTrans(); try {      ...

  5. thinkphp 多表事务处理

    try{ $this->user = D('User'); $this->user->startTrans(); //开始事务 $res = $this->user->S ...

  6. ThinkPHP5.0框架事务处理操作简单示例

    本文介绍ThinkPHP5.0框架事务处理操作,结合实例形式分析了ThinkPHP5针对删除操作的事务处理相关操作技巧,可以加深对ThinkPHP源码的理解,需要的朋友可以参考下 事务的调用在mysq ...

  7. tinkphp3.2.3 关于事务处理。

    自己做一个测试,关于事务处理的. 在对多表进行操作的时候 基本上都离不开事务. 有的操作,是要由上一操作后,产的值(如主表里插入后,要获取插入的主键ID值,返回给下面处理表用.)带到后面的表处理当中去 ...

  8. thinkphp 的事务回滚处理 和 原始PHP的事务回滚实例

    1.  要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql   为例: 数据库InnoDB支持 transactions 数据表支持事务:InnoDB  支持transaction ...

  9. legend---十一、thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里

    legend---十一.thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里 一.总结 一句话总结:执行的条件其 ...

随机推荐

  1. Android 混淆代码有关问题总结

    Android 混淆代码问题总结 Android 混淆代码: 最快的方式: 1. 首先更新Android的SDK至最新版本,重新建立1个工程,把源码和资源及其他文件拷到新的工程里面. 2. 工程目录底 ...

  2. php解析mpp文件中的多级任务

    获取层级的project任务  参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...

  3. 如何在LINUX中安装VM-Tools

    1.运行VM,启动你的虚拟LINUX系统. 2.切换到原系统,选择VM中的VM菜单----Install VMWare Tools. 3.在虚拟机设置里,请把你的VM-Tools的ISO文件映射到你的 ...

  4. centos 中文乱码解决途径

    在使用CentOS系统时,安装的时候可能你会遇到英文的CentOS系统,在这中情况下安装CentOS系统时是默认安装(即英文).安装完毕后,出现的各种中文乱码.那么,我们如何解决这种问题呢. 一.Ce ...

  5. 开发kendo-ui弹窗组件

    摘要: kendo-ui中只是提供了windwo插件,并没有提供页内弹窗插件.现在分享项目中自己定制的基于window组件的弹窗插件,如果你的项目也是用的kendo-ui,只需要将组件代码引到项目中即 ...

  6. spring mvc处理方法返回方式

    Model: package org.springframework.ui; import java.util.Collection; import java.util.Map; public int ...

  7. 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件删除漏洞分析

      0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...

  8. Perl操作Oracle

    一. perl连接Oracle数据库 [oracle@oracle11gR2 perl_script]$ more connect.pl #!/usr/bin/perl #perl script us ...

  9. CentOS7--配置时间和日期

    CentOS7提供三个命令行工具,可用于配置和显示有关系统日期和时间的信息. timedatectl:Linux 7中的新增功能,也是systemd其中的一部分. date:系统时钟,也成为软件时钟, ...

  10. 如何在taro的map循环中使用if条件渲染

    在taro的jsx中,鉴于编译的机制,官方明确的表示了不能在map循环中使用if循环, 但是呢,官方也给出了解决办法,那就是提取变量或者是用三目运算嵌套的方法: 链接奉上:https://github ...