通用添加和更新支持事务

浏览:1497 发布日期:2014/07/23 分类:技术分享 关键字: 事务
求各位大神吐槽,求更简单的写法/**
     *通用添加
     *@param string  $table   表名
     *@param array  $arr    用于在表单创建以后再添加额外的数据
     *@param bool $trans 是否将写库过程启用事务  true false 默认为False
     *@param $transData array 事务数据包
     */
    public function do_add($table,$arr=null,$trans = false ,$transData = null){
        $db = D("$table");
        if($db->create()){
            if(is_array($arr)){
                foreach ($arr as $key=>$val){
                    $db->$key=$val;
                }
            }
        }else{
            return $db->getError();
        }
        if($trans){
            $db->startTrans();//开启事务
            $i =(int)1;
            $status[$i] = $db->add();//主进程
            if($status[$i]){
                //主进程成功之后进行子进程
                $count = count($transData);//子进程的数量
                foreach($transData as $k=>$v){
                    if(is_array($v['data'])){
                        foreach($v['data'] as $a=>$c){
                            $b[$a] = str_replace(replace,$status[$i],$c);//引用上一进程的返回值
                            if(is_array($b[$a])){
                                $b[$a] = implode(',', $b[$a]);
                            }
                        }
                        $v['data'] = $b;
                    }
                    if($v['type'] == 'add'){//新增数据
                        $status[$i] = D(ucwords($v['table']))->add($v['data']);
                    }else{//更新数据
                        $status[$i] = D(ucwords($v['table']))->where($v['map'])->save($v['data']);
                    }
                    if($status[$i] == false){
                        //回滚任务
                        $db->rollback();
                        return false;
                    }
                    if($count == $k+1){
                        $db->commit();//提交事务
                        return true;
                    }
                    $i++;
                }
            }else{
                $db->rollback();
                return false;
            }
        } else {
            $status=$db->add();
            return $status;
        }
    }
    /**
     *通用更新
     *@param string  $table   表名
     *@param bool $trans 是否将写库过程启用事务  true false 默认为False
     *@param $transData array 事务数据包
     *$transData=array(
     *        'type'    =>'add',//'save'
     *        'table'    =>'',
     *        'map'    =>array(),
     *        'data'    =>array(
     *            'id' => $status,//引用上一进程的返回数据
     *        ),
     *);
     */
    public function do_up($table,$trans = false ,$transData = null){
        $db = D("$table");
        if($trans){
            if($db->create()){
                $db->startTrans();//开启事务
                $i =(int)1;
                $status[$i]=$db->save();
                if($status[$i]){
                    //主进程成功之后进行子进程
                    $count = count($transData);//子进程的数量
                    foreach($transData as $k=>$v){
                        if(is_array($v['data'])){
                            //引用上一进程的返回值
                            foreach($v['data'] as $a=>$c){
                                $b[$a] = str_replace(replace,$status[$i],$c);
                                if(is_array($b[$a])){
                                    $b[$a] = implode(',', $b[$a]);
                                }
                            }
                            $v['data'] = $b;
                        }
                        if($v['type'] == 'add'){//新增数据
                            $status[$i] = D(ucwords($v['table']))->add($v['data']);
                        }else{//更新数据
                            $status[$i] = D(ucwords($v['table']))->where($v['map'])->save($v['data']);
                        }
                        if($status[$i] == false){
                            //回滚任务
                            $db->rollback();
                            return false;
                        }
                        if($count == $k+1){
                            return true;
                            $db->commit();//提交事务
                        }
                        $i++;
                    }
                }else{
                    $db->rollback();
                    return false;
                }
            }else{
                return $db->getError();
            }
        }else{
            if($db->create()){
                $status=$db->save();
                return $status;
            }else{
                return $db->getError();
            }
        }
         
    }
最佳答案
评论( 相关
后面还有条评论,点击查看>>