本文介绍ThinkPHP5.0框架事务处理操作,结合实例形式分析了ThinkPHP5针对删除操作的事务处理相关操作技巧,可以加深对ThinkPHP源码的理解,需要的朋友可以参考下
事务的调用在mysql里需要注意下数据库引擎,处理前先查看一下
删除方法:
1 public function del() 2 { 3 $cate = new CateModel; 4 $id=input('id'); 5 $selectID=$cate->find($id); 6 if($id == ''){ 7 $this->error('请不要恶意测试'); 8 } 9 //调用事务删除 10 $del=$cate->shiwu($id); 11 if($del == true){ 12 $this->success('删除成功/!'); 13 }else{ 14 $this->error('删除失败/!'); 15 } 16 }
调用事务删除:
1 //事务处理删除 2 public function shiwu($id) 3 { 4 $cates=Cate::getChildId($id); 5 Db::startTrans($id,$cates); //$cates是所有子分类的一维数组 6 try{ 7 Db::table('tp_cate')->where('id','in',$cates)->delete(); //删除所有子分类 8 Db::table('tp_cate')->where('id',$id)->delete(); //删除自身 9 // 提交事务 10 Db::commit(); 11 return true; 12 } catch (\Exception $e) { 13 // 回滚事务 14 Db::rollback(); 15 return false; 16 } 17 }
getChildId方法:
1 public function getChildId($id) 2 { 3 $cateres=Cate::select(); 4 return $this->_getChildId($cateres,$id); 5 } 6 public function _getChildId($cateres,$id) 7 { 8 static $arr = array(); 9 foreach ($cateres as $k => $v) { 10 if($id == $v['pid']){ 11 $arr[] = $v['id']; 12 $this->_getChildId($cateres,$v['id']); 13 } 14 } 15 return $arr; 16 }
完毕!不知道大家学会了没有?