你好
我有一个关于类别和子类别的问题
我有这样的表:
ID----- 姓名---- ParentID
1 ------ A ---------- 0
2 ------ B ---------- 0
3 ------ C ---------- 1
我已经显示 A B C ok 。但我需要它会像这样显示:
一个
-- C
B
只是有问题,找不到这样做的方法(在父类别下创建子类别)
注意:我在 Views 中使用 make query 成功了,但我认为它不太好。
我想找到更好的方法
非常感谢
最佳答案
显示子、子和子类别 -
型号
迁移以下类别表:
Schema::create('categories', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->tinyInteger('parent_id')->default(0); $table->timestamps(); });
输入您的类别和子类别,如下表结构:
+-------------+----------------------+----------+ | id | name |parent_id | +-------------+----------------------+----------+ | 1 | ELECTRONICS | 0 | | 2 | TELEVISIONS | 1 | | 3 | TUBE | 2 | | 4 | LCD | 2 | | 5 | PLASMA | 2 | | 6 | PORTABLE ELECTRONICS | 1 | | 7 | MP3 PLAYERS | 6 | | 8 | FLASH | 7 | | 9 | CD PLAYERS | 6 | | 10 | 2 WAY RADIOS | 6 | +-------------+----------------------+----------+
Controller
MySQL层次递归查询
$categories = DB::table('categories as c1') ->leftJoin('categories as c2','c2.parent_id','=','c1.id') ->leftJoin('categories as c3','c3.parent_id','=','c2.id') ->leftJoin('categories as c4','c4.parent_id','=','c3.id') ->select('c1.id as c1_id','c1.name as c1_name','c2.id as c2_id','c2.name as c2_name','c3.id as c3_id','c3.name as c3_name','c4.id as c4_id','c4.name as c4_name') ->where('c1.parent_id','=',0) ->get();
输出:
+-----------------+--------------------------+------------------+-----------------+
|c1_id| c1_name | c2_id| c2_name | c3_id| c3_name | c4_id| c4_name |
+-----------------+--------------------------+------------------+-----------------+
| 1 | ELECTRONICS | 2 | TELEVISIONS | 3 | TUBE | NULL |
| 1 | ELECTRONICS | 2 | TELEVISIONS | 4 | LCD | NULL |
| 1 | ELECTRONICS | 2 | TELEVISIONS | 5 | PLASMA | NULL |
| 1 | ELECTRONICS | 6 | PORTABLE ELECTRONICS | 7 | MP3 PLAYERS | 8 | FLASH |
| 1 | ELECTRONICS | 6 | PORTABLE ELECTRONICS | 9 | CD PLAYERS | NULL |
| 1 | ELECTRONICS | 6 | PORTABLE ELECTRONICS | 10| 2 WAY RADIOS | NULL |
+-------------+--------------------------------------+--------------+-------+
然后,将
$categories
值放入数组
。$all_categories = []; $category_c1_id = ''; $category_c2_id = ''; $category_c3_id = ''; $category_c4_id = ''; $c1_id = -1; $c2_id = -1; $c3_id = -1; $c4_id = -1; foreach ($categories as $k=>$category){ if($category->c1_id != $category_c1_id){ $c1_id = $c1_id +1; $all_categories[$c1_id]['id'] = $category->c1_id; $all_categories[$c1_id]['name'] = $category->c1_name; $c2_id = -1; } if($category->c2_id != $category_c2_id && $category->c2_id <> NULL){ $c2_id = $c2_id +1; $all_categories[$c1_id]['children'][$c2_id]['id'] = $category->c2_id; $all_categories[$c1_id]['children'][$c2_id]['name'] = $category->c2_name; $c3_id = -1; } if($category->c3_id != $category_c3_id && $category->c3_id <> NULL){ $c3_id = $c3_id +1; $all_categories[$c1_id]['children'][$c2_id]['children'][$c3_id]['id'] = $category->c3_id; $all_categories[$c1_id]['children'][$c2_id]['children'][$c3_id]['name'] = $category->c3_name; $c4_id = -1; } if($category->c4_id != $category_c4_id && $category->c3_id <> NULL){ $c4_id = $c4_id +1; $all_categories[$c1_id]['children'][$c2_id]['children'][$c3_id]['children'][$c4_id]['id'] = $category->c4_id; $all_categories[$c1_id]['children'][$c2_id]['children'][$c3_id]['children'][$c4_id]['name'] = $category->c4_name; } $category_c1_id = $category->c1_id; $category_c2_id = $category->c2_id; $category_c3_id = $category->c3_id; $category_c4_id = $category->c4_id; } return $all_categories;
输出:
$categories = [ ['id' => 1, 'name' => 'TV & Home Theather'], ['id' => 2, 'name' => 'Tablets & E-Readers'], ['id' => 3, 'name' => 'Computers', 'children' => [ ['id' => 4, 'name' => 'Laptops', 'children' => [ ['id' => 5, 'name' => 'PC Laptops'], ['id' => 6, 'name' => 'Macbooks (Air/Pro)'] ]], ['id' => 7, 'name' => 'Desktops'], ['id' => 8, 'name' => 'Monitors'] ]], ['id' => 9, 'name' => 'Cell Phones'] ];
查看
现在显示在选择产品上传选项。
<div class="form-group"> <label>Select Categories</label><br/> @foreach($categories as $category) @php($category = (object)$category) <div class="form-check"> <label class="form-check-label" for="{{$category->id}}"> {{ Form::checkbox('category_ids[]', $category->id, null, array('id'=>$category->id)) }} {{$category->name}} </label> @if(isset($category->children)) @foreach($category->children as $subcategory) @php($subcategory = (object)$subcategory) <div class="form-check" style="margin-left: 15px;"> <label class="form-check-label" for="{{$subcategory->id}}"> {{ Form::checkbox('category_ids[]', $subcategory->id, null, array('id'=>$subcategory->id)) }} {{$subcategory->name}} </label> @if(isset($subcategory->children)) @foreach($subcategory->children as $subsubcategory) @php($subsubcategory = (object)$subsubcategory) <div class="form-check" style="margin-left: 15px;"> <label class="form-check-label" for="{{$subsubcategory->id}}"> {{ Form::checkbox('category_ids[]', $subsubcategory->id, null, array('id'=>$subsubcategory->id)) }} {{$subsubcategory->name}} </label> </div> @endforeach @endif </div> @endforeach @endif </div> @endforeach </div>
开启菜单选项
<ul class="nav primary clone-main-menu toggle-slide-menu" id="mercado_main" data-menuname="Main menu" > @foreach($categories as $category) <li class="menu-item menu-item-has-children item-megamenu" > <a href="#" title="Digital & Electronics" class="link-term mercado-item-title">{{$category['name']}}</a> <div class="wrap-megamenu"> <div class="megamenu-content min-height-510 bg-vertical-digital"> @if(isset($category['children'])) <div class="row"> @foreach($category['children'] as $subcategory) <div class="col-lg-3 col-md-3"> <div class="wrap-vertical-nav"> <h2 class="menu-title"><a href="#" class="link-term">{{$subcategory['name']}}</a></h2> @if(isset($subcategory['children'])) <ul> @foreach($subcategory['children'] as $subcategory) <li class="menu-item"><a href="#" class="link-term">{{$subcategory['name']}}</a></li> @endforeach </ul> @endif </div> </div> @endforeach </div> @endif </div> </div> </li> @endforeach </ul>
关于Laravel - 子类别显示在主要类别下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24257892/