我们在进行一些业务逻辑的时候,难免会出现批量操作的问题,特别是批量修改操作,如果数据量大,总会考虑到批量修改到一半怎么办?所以如果使用事务来进行批量操作就会好很多,直接看代码:
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));
}