tp5 分类无限级查询和删除

分类添加方法

模型文件中的方法

    //创建一个静态方法,获取分类
    /**
     * Undocumented function
     *
     * @param integer $pid 当前父ID
     * @param array $result  引用返回值
     * @param integer $blank 设置分类之间的显示提示  就是空格
     * @return void
     */
    public static function getCate($pid = 0, &$result = [], $blank = 0) //引用传参 &
    {
        $res = self::all(['pid' => $pid]);
        // 自定义分类名称前面的提示
        $blank += 2;
        // 遍历分类表
        foreach ($res as $key => $value) {
            // 自定义分类名称的显示格式
            $cate_name = '|--' . $value->cate_name;
            $value->cate_name = str_repeat('&nbsp', $blank) . $cate_name;
            // 将查询到的结果保存到$result中
            $result[] = $value;
            // 将当前记录的id,作为下一级分类的父id,继续递归调用本方法
            self::getCate($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('删除失败!');
        }
    }

模型中的方法

 1    // 删除操作  无限级查找子类
 2     /**
 3      * Undocumented function
 4      *
 5      * @param [type] $cateid    //当前删除的id
 6      * @param array $result     //静态数组集合
 7      * @return void
 8      */
 9     public static function delnext($cateid, &$result = [])
10     {
11         // 查询所有数据
12         $data = self::select(); //查询所有父id为当前id的子类
13         foreach ($data as $v) {
14             if ($v['pid'] == $cateid) {
15                 $result[] = $v['id']; //如果有,将这些数据的id放入数组中
16                 self::delnext($v['id'], $result); //根据这些数据的id继续调用自身
17             }
18         }
19         return $result;
20     }
posted @ 2020-01-03 10:29  一颗糊涂淡  阅读(1021)  评论(0编辑  收藏  举报