laravel无限极分类实现

laravel无限极分类实现

学习使用laravel,一个list列表中一个分类中含有子分类这种情况的实现方法。这里使用两种方法。
第一种方法
模型操作使用回调函数处理数据

    public function tree()
    {
        $category = $this->orderBy('cate_order','asc')->get();
        return $this->getTree($category,'cate_name','id','cate_pid','0');

    }

    public function getTree($data,$filed_name,$filed_id,$filed_fid,$pid)
    {
        $arr = array();
        foreach ($data as $k=>$v){
            if ($v->$filed_fid==$pid){
                $data[$k]['_'.$filed_name] =$data[$k][$filed_name];
                $arr[]=$data[$k];
                foreach ($data as $m =>$n){
                    if ($n ->$filed_fid == $v->$filed_id){
                        $data[$m]['_'.$filed_name] =" ┣".$data[$m][$filed_name];
                        $arr[]=$data[$m];
                    }
                }
            }
        }
        return $arr;
    }

控制器操作

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

页面

                    @foreach($category as $v)
                        
                            
                            
                            {{$v ->id}}
                            
                                {{$v ->_cate_name}}
                            
                            {{$v ->cate_title}}
                            {{$v ->cate_view}}
                            
                                修改
                                删除
                            
                        
                     @endforeach

第二种方法
模型操作,(类似做无限级分类,使用递归处理数据)。

    public function tree($cate_pid=0)
    {
        $category =Category::where('cate_pid',$cate_pid)->get();  //第一次做的时候get()后面加了toArray(),页面遍历数据时报错遍历的不是对象,去掉后可行

        $arr = array();
        if (sizeof($category) !=0){
            foreach ($category as $k =>$datum) {
                $datum['list'] = $this->tree($datum['id']);
                $arr[]=$datum;
            }
        }
        return $arr;

    }

控制器操作

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

视图遍历

                 @foreach($category as $v)
                        @if($v->cate_pid == 0)
                        
                            {{$v ->id}}
                            
                                {{$v ->cate_name}}
                            
                            {{$v ->cate_title}}
                            {{$v ->cate_view}}
                            
                                修改
                                删除
                            
                        
                            @foreach($v->list as $li2)
                                
                                    {{$li2 ->id}}
                                    
                                        {{$li2 ->cate_name}}
                                    
                                    {{$li2 ->cate_title}}
                                    {{$li2 ->cate_view}}
                                    
                                        修改
                                        删除
                                    
                                
                            @endforeach
                        @endif
                    @endforeach

你可能感兴趣的:(PHP基础知识,项目经验,laravel)