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中

    以此来记录编程之路,偶尔需要静下心来写点东西。
  • 相关阅读:
    Java8新特性Stream详细教程
    自定义注解!绝对是程序员装逼的利器!!
    如何处理重复请求/并发请求的
    C#字符处理
    mysql 索引
    mysql事件【定时器】
    JS日期,金钱处理
    Controller中使用@Value无法获取属性值
    druid连接池的配置
    mybatiste报错java.lang.ClassCastException
  • 原文地址:https://www.cnblogs.com/yaradish/p/9452854.html
Copyright © 2011-2022 走看看