删除无限极分类中的父类,子类也一并删除;
在控制器中操作;
首先创建一个前置操作;也就是在删除操作之间先执行其他的操作(这里是先删除子类操作); //前置操作; /* doson为需要执行的方法, 'only'=>'doDel'为只要执行doDel方法, 连在一起就是:在执行doDel方法之前,就先执行doson方法; */ protected $beforeActionList = [ 'doson' => ['only'=>'doDel'] ]; //单个删除操作; public function doDel(){ $id = Request::param('id'); $res = CateModel::destroy($id); if($res){ $this->success('删除成功','cate/index'); }else{ $this->error('删除失败'); } } //下级分类删除; public function doson(){ //获取当前id; $cateid = Request::param('id'); //如果发现单个不能删除,那么将res进行判断有子类是才进行删除; $res = CateModel::delnext($cateid); // dump($res);die; //传递过来的是数组;主键d; //将当前删除的id放入到子id集合中; $res[] = $cateid; // dump($res);die; //删除栏目; $result = CateModel::destroy($res); }
在model中查找下一级;
/** &$result //静态数组集合; $id //当前删除的id; */ //递归实现子类查询; public static function delnext($cateid,&$result=[]){ //查询所有数据; //这里也可以直接用条件查询到pid,就不用下面的if判断了; //$data = CateModel::where(['pid'=>$cateid])->select() $data = CateModel::select(); //将这些数据进行循环; foreach($data as $k => $v){ //判断这些数据中pid等于当前id的; if($v['pid'] == $cateid){ //有,将这些数据的id放入到数组中; $result[] = $v['id']; //然后在根据这些数据的id进行调用自己; self::delnext($v['id'],$result); } } return $result; }