最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • laravel层级分类列表接口

    正文概述 转载于:掘金(陆小天奥利给)   2021-08-26   223

    这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战

    一、分类层级列表api

    1.1 创建全局辅助函数

    如果我们直接去取的话,会发现返回的数据不会像菜单那种嵌套的数据,当然你也可以直接给前端,让他处理,但是是非常不友好的,我们既然提供api的话就要健壮性,友好性,能够让api调用直接能用的。

    1、创建全局自定义辅助函数 在根目录下创建heplers.php,创建完之后需要在composer.php中加入自动加载类。 laravel层级分类列表接口 添加完自动加载之后,需要去刷新下,运行命令composer dump-autoloadlaravel层级分类列表接口


    heplers.php写入代码:

    <?php
    use App\Models\Category;
    
        /**
         * 所有分类选择属性返回
         */
        if (!function_exists('categoryTree')) {
            function categoryTree ($status=false) { 
                $categories = Category::select(['id','pid','name','level','status'])
                ->when($status !== false, function ($query) use ($status) {
                    $query->where('status', $status);
                })
                -> where('pid', 0) 
                ->with([
                    'children' => function ($query) use ($status) {
                          $query->select(['id','pid','name','level','status'])
                        ->when($status !== false, function ($query) use ($status) { 
                            $query->where('status', $status);
                        });
                    },
                    'children.children' => function ($query) use ($status) {
                        $query->select(['id','pid','name','level','status'])
                        ->when($status !== false, function ($query) use ($status) {
                            $query->where('status', $status);
                        });
                    }
                ]) // 嵌套关联,让子类去查找关联子类
                ->get();
                return $categories;
            }
        } 
    
        /**
         * 缓存没被禁用的分类
         */
        if (!function_exists('cache_category')) {
            function cache_category () {
                return cache()->rememberForever('cache_category', function () {
                    return categoryTree(1);
                });
            }
        }
    
        /**
         * 缓存所有的分类
         */
        if (!function_exists('cache_category_all')) {
            function cache_category_all () {
                return cache()->rememberForever('cache_category_all', function () {
                    return categoryTree();
                });
            }
        }
    
        /**
         * 清空所有分类缓存
         */ 
        if (!function_exists('forget_cache_category_all')) {
            function forget_cache_category_all () {
                cache()->forget('cache_category_all');
                cache()->forget('cache_category');
            }
        }
    

    代码解析:


    1.2 分类api列表控制器

    public function index()
        {   
            return cache_category_all();
        }
    

    laravel层级分类列表接口 可以看到我们这里直接去取我们写好的辅助函数。 但是需要注意的是,我们在添加控制器方法中是需要清除缓存的: laravel层级分类列表接口 也是直接调用我们写好的清除缓存的辅助函数。


    1.3 效果

    laravel层级分类列表接口

    可以看到我们调用请求分类列表,其数据格式(三级嵌套)如下:

    [
        {
            "id": 9,
            "pid": "0",
            "name": "商品管理",
            "level": 1,
            "status": 1,
            "children": [
                {
                    "id": 11,
                    "pid": "9",
                    "name": "商品列表",
                    "level": 2,
                    "status": 1,
                    "children": []
                },
                {
                    "id": 12,
                    "pid": "9",
                    "name": "添加商品",
                    "level": 2,
                    "status": 0,
                    "children": []
                }
            ]
        },
        {
            "id": 10,
            "pid": "0",
            "name": "权限管理",
            "level": 1,
            "status": 1,
            "children": [
                {
                    "id": 13,
                    "pid": "10",
                    "name": "菜单管理",
                    "level": 2,
                    "status": 1,
                    "children": [
                        {
                            "id": 14,
                            "pid": "13",
                            "name": "添加菜单",
                            "level": 3,
                            "status": 1
                        }
                    ]
                },
                {
                    "id": 15,
                    "pid": "10",
                    "name": "人员管理",
                    "level": 2,
                    "status": 1,
                    "children": [
                        {
                            "id": 16,
                            "pid": "15",
                            "name": "添加人员",
                            "level": 3,
                            "status": 0
                        },
                        {
                            "id": 18,
                            "pid": "15",
                            "name": "删除人员",
                            "level": 3,
                            "status": 1
                        },
                        {
                            "id": 19,
                            "pid": "15",
                            "name": "删除人员",
                            "level": 3,
                            "status": 1
                        }
                    ]
                }
            ]
        }
    ]
    

    起源地 » laravel层级分类列表接口

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元