zoukankan      html  css  js  c++  java
  • 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));
    }
    

      

  • 相关阅读:
    Linux软件的卸载
    elasticsearch2.x插件之一:marvel(简介)
    elasticsearch2.x插件之一:kibana
    Jmeter简单测试elasticsearch服务器
    telnet
    koa 路由模块化(一)
    koa 应用生成器
    koa 基础(二十六)数据库 与 art-template 模板 联动 --- 编辑数据、删除数据
    koa 基础(二十五)数据库 与 art-template 模板 联动 --- 新增数据
    koa 基础(二十四)封装 DB 库 --- 新增数据、更新数据、删除数据
  • 原文地址:https://www.cnblogs.com/e0yu/p/10153444.html
Copyright © 2011-2022 走看看