/**
*通用添加
*@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();
}
}
} 最佳答案