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));
}

  

猜你喜欢

转载自www.cnblogs.com/e0yu/p/10153444.html
今日推荐