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中

 

posted @ 2018-08-10 08:41  进阶丶xiao路  阅读(744)  评论(0编辑  收藏  举报