thinkphp---用事务处理批量操作
我们在进行一些业务逻辑的时候,难免会出现批量操作的问题,特别是批量修改操作,如果数据量大,总会考虑到批量修改到一半怎么办?所以如果使用事务来进行批量操作就会好很多,直接看代码:
public function edit(){
    if(!IS_POST)die;
    $data = I('post.');
    $columDB = D('Column');
    $id = I('post.id','','intval');
    $mid = I('post.mid','','intval');
    $name = strtolower(I('post.name','','trim'));
    $pid = I('post.pid','','intval');
    //$savepid = $columDB->where(array('id'=>$id))->getField('pid');
    // $model_name = M('admin_model')->where(array('id'=>$mid))->getField('table_name');
    $data['url'] = $name.'/';
    $data['updatetime'] = time();
    // if(!$pid){
    //     $data['url'] = strtolower($model_name).'/index.html';
    // };
    // 顶级栏目用的是 index 方法
    $return = array();
    $return['code'] = 1;
    $return['msg'] = '修改成功';
    // 修改栏目的时候 如果修改过栏目的标识 需要修改当前栏目下的所有文章的链接
    $cateInfo = $columDB->find($id);
    $error=[]; // 记录失败ID
    if($name != $cateInfo['name']){
        $document = M('document');
        $list = $document->where(array('cid'=>$id))->select();
        // 开启事务
        $document->startTrans();
        foreach($list as $k=>$v){
            // setField('value', $val);
            $isRight = $document->where(array('id'=>$v['id']))->setField('url',$name.'/'.$v['id'].'.html');
            if(!$isRight){
                $error[] = $isRight;
            };
        };
        if(count($error)){
            $document->rollback();
            $return['code'] = 0;
            $return['msg'] = '修改栏目文章链接失败';
            exit(json_encode($return));
        };
        $document->commit();
    };
    if(!$columDB->create($data)){
        $return['code'] = 0;
        $return['msg'] = $columDB->getError();
        exit(json_encode($return));
    };
    // 开启事务
    $columDB->startTrans();
    $resID = $columDB->save();
    if(!$resID && $resID != 0){
        // 回滚
        $columDB->rollback();
        $return['code'] = 0;
        $return['msg'] = '修改失败';
    };
    $columDB->commit();
    // if(!$resID && $resID != 0){
    //     $return['code'] = 0;
    //     $return['msg'] = '修改失败';
    // };
    $return['id'] = $resID;
    exit(json_encode($return));
}
thinkphp---用事务处理批量操作的更多相关文章
- 分布式缓存Redis集群配置使用
		Redis 简介 redis是一种开源的.基于内存的.可持久化的.高性能的Key-Value数据存储系统. redis能做什么? 持久化存储 高速缓存 消息中间件 ... 
- thinkphp事务处理以及无效时的解决方案(整理)
		thinkphp事务处理以及无效时的解决方案(整理) 一.总结 一句话总结:要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql 1.InnoDB和MyISAM对事务的支持怎么样? I ... 
- ThinkPHP实现事务回滚示例代码(附加:PDO的事务处理)
		ThinkPHP的事务回滚示例如下: $m=D('YourModel');//或者是M(); $m2=D('YouModel2'); $m->startTrans();//在第一个模型里启用就可 ... 
- ThinkPHP  事务处理 (事务回滚) 、异常处理
		$tran_result = true; $trans = M(); $trans->startTrans(); try { ... 
- thinkphp 多表事务处理
		try{ $this->user = D('User'); $this->user->startTrans(); //开始事务 $res = $this->user->S ... 
- ThinkPHP5.0框架事务处理操作简单示例
		本文介绍ThinkPHP5.0框架事务处理操作,结合实例形式分析了ThinkPHP5针对删除操作的事务处理相关操作技巧,可以加深对ThinkPHP源码的理解,需要的朋友可以参考下 事务的调用在mysq ... 
- tinkphp3.2.3 关于事务处理。
		自己做一个测试,关于事务处理的. 在对多表进行操作的时候 基本上都离不开事务. 有的操作,是要由上一操作后,产的值(如主表里插入后,要获取插入的主键ID值,返回给下面处理表用.)带到后面的表处理当中去 ... 
- thinkphp 的事务回滚处理  和 原始PHP的事务回滚实例
		1. 要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql 为例: 数据库InnoDB支持 transactions 数据表支持事务:InnoDB 支持transaction ... 
- legend---十一、thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里
		legend---十一.thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里 一.总结 一句话总结:执行的条件其 ... 
随机推荐
- 分析技术在PMP中的应用
			Analytical Techniques, 根据可能的项目或者环境变量变化以及它们与其他变量之间的关系,对潜在后果进行评估,分析和预测的各种技术. 4.4.2.2 监控项目工作: 分析技术 包括: ... 
- QT基础:QT 定时器学习
			定时器在编程中经常要用到,有必要学习一下,记记笔记! Qt中定时器的使用有两种方法,一种是使用QObject类提供的定时器,还有一种就是使用QTimer类. 1.QObject中的定时器的使用,需要用 ... 
- 禁止requests请求https的提示InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more
			提示这个 InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from ... 
- Jackson Gson Json.simple 比较
			为公司做了小任务,需要用到Java Json库,Json库我几个月之前就用过,不过那时候是跟着项目来的,延续了项目的使用习惯直接用了jackson Json,而这次我觉得好好比较一下几个常见的Json ... 
- 查看一个dll是否是强命名[C#]
			使用命令行工具SDK Command Prompt,键入:SN -T C:\*****.dll 就会显示出该dll具体的PublicKeyToken 数值. 如果该程序集没有强命名,则不会有Publi ... 
- #pragma init_seg
			先进后出原则,最先初始化的最后析构! 1.C++中全局对象.变量的构造函数调用顺序是跟声明有一定关系的,即在同一个文件中先声明的先调用.对于不同文件中的全局对象.变量,它们的构造函数调用顺序是未定义的 ... 
- 使用C#把发表的时间改为几个月,几天前,几小时前,几分钟前,或几秒前
			//使用C#把发表的时间改为几个月,几天前,几小时前,几分钟前,或几秒前 //2008年03月15日 星期六 02:35 public string DateStringFromNow(DateTim ... 
- <转>pandas学习
			1.Pandas 基本介绍 Numpy 和 Pandas 有什么不同? 如果用 python 的列表和字典来作比较, 那么可以说 Numpy 是列表形式的,没有数值标签,而 Pandas 就是字典形式 ... 
- #define #undef
			#include <stdio.h> int main( void ) { #define MAX 200 printf("MAX= %d\n",MAX); #unde ... 
- Eclipse安装php插件phpeclipse(转)
			1.PHPEclipse是Eclipse的一个用于开发PHP的插件.官网下载地址:http://sourceforge.net/projects/phpeclipse/下载解压后,将features和 ... 
