无限级分类

文章原文 : 这里主要做记录
https://www.cnblogs.com/zhangcheng001/p/12143585.html

无限级分类

public static function getList($pid = 0, &$result = [], $blank = 0)
    {
        $res = Db::name('category')->where('pid', $pid)->select();
        // 自定义分类名称前面的提示
        $blank += 2;
        // 遍历分类表
        foreach ($res as $key => $value) {
            // 自定义分类名称的显示格式
            $cate_name = '|--' . $value['name'];
            $value['name'] = str_repeat('&nbsp', $blank) . $cate_name;
            // 将查询到的结果保存到$result中
            $result[] = $value;
            // 将当前记录的id,作为下一级分类的父id,继续递归调用本方法
            self::getList($value['id'], $result, $blank);
        }
        // 返回查询结果,调用结果集类make方法打包当前结果,转为二维数组返回
        return Collection::make($result)->toArray();

    }

无限级删除

控制器内的

// 删除
    // 在执行del方法之前 先执行delson
    protected $beforeActionList = [
        'delson' => ['only' => 'del']
    ];
    // 删除父级
    public function del()
    {
        $id = input('id');
        $res = model('Cate')->where('id', $id)->delete();
        if ($res) {
            $this->success('删除成功!', 'admin/cate/cateList');
        } else {
            $this->error('删除失败!');
        }
    }
    // 删除下级分类
    public function delson()
    {
        // 获取当前id
        $cateid = input('id');
        // 判断删除子类
        $res = model('Cate')::delnext($cateid); //调用模型中的方法 查找子类
        // 将当前删除的id存放到子类id集合中
        $res[] = $cateid;
        // 删除栏目
        $result = model('Cate')->destroy($res);
        if ($result) {
            $this->success('删除成功!', 'admin/cate/cateList');
        } else {
            $this->error('删除失败!');
        }
    }

模型中的方法

// 删除操作  无限级查找子类
    /**
     * Undocumented function
     *
     * @param [type] $cateid    //当前删除的id
     * @param array $result     //静态数组集合
     * @return void
     */
    public static function delnext($cateid, &$result = [])
    {
        // 查询所有数据
        $data = self::select(); //查询所有父id为当前id的子类
        foreach ($data as $v) {
            if ($v['pid'] == $cateid) {
                $result[] = $v['id']; //如果有,将这些数据的id放入数组中
                self::delnext($v['id'], $result); //根据这些数据的id继续调用自身
            }
        }
        return $result;
    }
posted @ 2022-11-18 09:44  IUser  阅读(19)  评论(0编辑  收藏  举报