删除分类的同时删除下面分类的文章,并删除图片

首先 article表 文章表,有cate_id和 cate表的id对应

bick项目 cate部分

Model:

<?php

namespace app\Admin\model;

use think\Model;
use think\Collection;
use app\Admin\model\Article as ArticleModel;
class Cate extends Model
{
    //递归调用  --无限极分类 格式化
    public static function catetree($pid = 0, &$res = [], $level = 0)
    {
        $data = self::where(['pid'=>$pid])->order('order asc')->select();
//        $data = self::all(['pid'=>$pid]);
        foreach ($data as $k=>$v){
            $v['cate_name'] = str_repeat('●&nbsp;—&nbsp;—&nbsp;',$level).$v['cate_name'];
            $res[]  =  $v;
            self::catetree($v['id'],$res,$level+1);
        }
        return $res;
    }
    // 获取当前id下所有的子分类
    public static  function  getChildrenId($id,&$res = []){
        $data = self::all(['pid'=>$id]);
        foreach ($data as $k=>$v){
                $res[] = $v['id'];
                self::getChildrenId($v['id'],$res);
        }
        return $res;
    }
    // 获取当前id下所有的子分类的文章
    public static  function  getArticleid($id,&$res = []){
        $type = gettype($id);//没有子分类时类型是string,有子分类类型是array
        if ($type == 'array'){
            $data = ArticleModel::where("cate_id in (".implode(',',$id).")")->select();
        }
        elseif ($type == 'string'){
            $data = ArticleModel::where(['cate_id'=>$id])->select();
        }
        else{
            $data = '';
        }
       if ($data){
           foreach ($data as $k=>$v){
               $res[] = $v['id'];
           }
       }
        return $res;
    }

}






Controller:

<?php

namespace app\Admin\controller;
use think\Controller;
use think\Request;
use app\Admin\model\Cate as CateModel;
use app\Admin\model\Article as ArticleModel;

class Cate extends BaseController
{
    public function delete($id)
    {
        //获取子分类的id  (数组)
        $childrenId = CateModel::getChildrenId($id);
        //如果有子分类,则删除子分类
        if ($childrenId){
            $childrenId[] = (int)$id;  //如果有子分类,把父分类的id加入子分类id数组中
            $delArtId = CateModel::getArticleid($childrenId);//所有子分类本类的文章id
            $delchild = CateModel::destroy($childrenId);//删除子栏目 ,由于里面有本分类,所以本分类也删除
            $article = ArticleModel::destroy(function ($query) use($childrenId){  //删除栏目下的文章
                $query->where("cate_id in (".implode(',',$childrenId).")");
            });
        }
        else{
            $delArtId = CateModel::getArticleid($id);//所有本分类本类的文章id
            $article = ArticleModel::destroy($delArtId);
            $del = CateModel::destroy($id);//删除本分类
        }
        foreach ($delArtId as $value){
            $delImg = ArticleModel::field('image')->where(['id'=>$value])->find();//遍历得到的每个结果
            if ($delImg['image']){
                $address = ROOT_PATH.'public'.$delImg['image'];//完整的图片地址
                if (file_exists($address)){
                    @unlink($address);
                }
            }
        };
        if (isset($delchild)){
            $this->success('删除栏目及子栏目成功!','cate/list');
        }
        elseif ($del){
            $this->success('删除栏目成功!','cate/list');
        }else{
            $this->error('删除栏目失败!','cate/list');
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苗先生的PHP记录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值