thinkphp删除无限极分类下的所有子栏目的方法
作者:互联网
我们前面讲过利用thinkPHP创建无限极分类的方法,本节我们讲如何一并删除顶级栏目下的子栏目的方法;
简单的讲,单独删除一条数据很简单,直接获取当前要删除的栏目的ID即可完成,但是我们要删除顶级栏目的时候发现并没有一起删除,比如看看图,我要删除新疆这个栏目的时候一并删除下面的子栏目,现在清楚了吧??
数据库里面的数据如下:
这个时候我们会用到thinkPHP里面的前置操作方法,意思就是删除当前数据之前判断该栏目是否存在子栏目,前置操作代码如下:
protected $beforeActionList = [ 'deleteAll' => ['only'=>'del'], //前置操作,执行del方法之前执行deleteAll方法 ];
然后在当前控制器定义删除的方法:
1 public function del($id) 2 { 3 $del=db('cate')->delete($id); 4 if ($del) { 5 $this->success('删除栏目成功','list'); 6 }else 7 { 8 return $this->error('删除栏目失败'); 9 } 10 } 11 12 public function deleteAll(){ 13 $cateId=input('id');//要删除的当前栏目的Id 14 $cate=new CateModel(); //实例化模型 15 $sonids=$cate->getchildrenid($cateId); //执行模型里面的方法 16 if ($sonids) { 17 db('cate')->delete($sonids); 18 } 19 }查看源代码
接着在模型层里面定义一个获取子栏目的方法:
1 public function getchildrenid($cateId) 2 { 3 $cateRes=$this->select(); //数据库中读取数据 4 return $this->getChildrenAllId($cateRes,$cateId); //执行本模型里面的找到所有子栏目的方法 5 } 6 7 public function getChildrenAllId($cateRes,$cateId) 8 { 9 static $arr=array(); //穿件空数组 10 foreach ($cateRes as $k => $v) { //循环获取的数据 11 if ($v['pid'] == $cateId) { //如果当前值得pid等于前面获取的栏目的ID,则写入数组中 12 $arr[]=$v['id']; 13 $this->_getchildrenid($cateRes,$v['id']); //循环执行自己,直到找不到值 14 } 15 } 16 return $arr; //返回数组 17 }View Code
就这样完成了同时删除子栏目的功能,效果如下:
数据库里面的数据显示如下:
是不是很简单啊,如果有什么不懂的可以在评论区评论哦
标签:栏目,删除,无限极,del,cateRes,thinkphp,cateId,id 来源: https://www.cnblogs.com/yakupjan123/p/10802150.html