删除无限极分类中的父类,子类也一并删除;
在控制器中操作;首先创建一个前置操作;也就是在删除操作之间先执行其他的操作(这里是先删除子类操作);
//前置操作;
/*
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;
}