zoukankan      html  css  js  c++  java
  • laravel博客(category)

    问题:在分类显示时需要将同一上级类的子类在下方显示,方便管理、修改;理想模样如图:

                       

    想法:在数据库取出数据后,对得到的数组重新进行排序,放进一个新的数组内,然后将新新的数组输出模板。

    实施:定义空数组,遍历数据库数组放到新的数组内,

    public function index(){
            $category = Category::all();    

          $arr = [];
          foreach ($category as $k => $v) {                           
            if($v->pid == 0){                                                #首先判断父级类
               $arr[] = $data[$k];                                         #父级类存入数组
               foreach($data as $k1=>$v1){                    #遍历子类
                 if($v1->pid == $v->$field_id){                           #判断下一级别的子类
                  $arr[] =$data[$k1];                                     #子类存入数组
                 }
               }
             }
           }

    return view('admin.category.index')->with('data',$arr);
    }

    :将方法提取出来放在model中,使用时只需要调用方法便可以达到目的:

      ①在什么时候都可以使用,减少代码冗余。②遵循丰富的model,简单的控制器原则

      public function tree(){
              $category = (new Category)->all();
              return $this->getTree($category,'cate_name','cate_id','cate_pid');
      }

    public function getTree($data,$field_name,$field_id="id",$field_pid="pid",$pid=0){
            $arr = [];
            foreach ($data as $k => $v) {
                if($v->$field_pid == $pid){
                    $v['_cate_name'] = $v[$field_name];
                    $arr[] = $data[$k];
                    foreach($data as $k1=>$v1){
                        if($v1->$field_pid == $v->$field_id){
                            $v1['_cate_name'] = '|----'.$v1[$field_name];
                            $arr[] =$data[$k1];
                        }
                    }
                }
            }
            return $arr;
        }

      通过此方法达到了单一责任原则,在使用是只需要调用tree方法即可。

        public function index(){
            $category = (new Category)-> tree();
            return view('admin.category.index')->with('data',$category);
        }

    补充:可以将tree()改为静态方法,调用时不需要实例化

        public static function tree(){
            $category = Category::orderBy('cate_order')->get();
            return (new Category)->getTree($category,'cate_name','cate_id','cate_pid');
        }

      调用仍然使用tree方法

        public function index(){
            $category = Category::tree();
            return view('admin.category.index')->with('data',$category);
        }

    总结:1、分类级别显示只需要对数组再次排序

        2、尽量减少控制器代码,写入到model中

    以此来记录编程之路,偶尔需要静下心来写点东西。
  • 相关阅读:
    Vue 2.x windows环境下安装
    VSCODE官网下载缓慢或下载失败 解决办法
    angular cli 降级
    Win10 VS2019 设置 以管理员身份运行
    XSHELL 连接 阿里云ECS实例
    Chrome浏览器跨域设置
    DBeaver 执行 mysql 多条语句报错
    DBeaver 连接MySql 8.0 报错 Public Key Retrieval is not allowed
    DBeaver 连接MySql 8.0报错 Unable to load authentication plugin 'caching_sha2_password'
    Linux系统分区
  • 原文地址:https://www.cnblogs.com/yaradish/p/9452854.html
Copyright © 2011-2022 走看看