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中

 

转载于:https://www.cnblogs.com/yaradish/p/9452854.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值