需求:显示一个级别,让下级在这个级别下面显示,也可以按时间归档处理,把某个时间段的放到一个时间里。大概格式如下:
php laravel、thinkphp、file mysql select、insert、update linux
方案:①首先需要把一级分类显示出来,然后在循环中根据id查询到它的子类再次循环输出;如下
@foreach($allcate as $d) #先循环输出上级
<a href="{{url(‘cate/‘.$d->cate_id)}}" target="_blank" ><h3>{{$d->cate_name}}</h3></a>
<p class="dateview">
<?php $childcate = DB::table(‘category‘)->where(‘cate_pid‘,$d->cate_id)->get(); ?> #输出上级后根据id,在模板中查询所有下级
{{var_dump(count($childcate))}}
@if(count($childcate) != 0)
@foreach($childcate as $cc) #模板循环输出下级
<span><a href="{{url(‘cate/‘.$cc->cate_id)}}">{{$cc->cate_name}}</a></span>
@endforeach
@else
<span>暂无下级</span>
@endif
</p>
@endforeach
②在控制器对下级稍微处理一下,将所有下级作为一个数组存在查询到的上级数组中,也就是说先把所有的上级查询出来,遍历这个二维数组,即每一个数组都是一个上级的数组,在这个数组中添加一个字段用来存放它所有大下级,在模板中查询时将这个字段再次遍历,便得到了每一个下级。
public function allcate(){ $allcate = Category::where(‘cate_pid‘,0)->paginate(5); foreach ($allcate as $value) { $child = Category::where(‘cate_pid‘,$value->cate_id)->get(); #查询它所有的下级 $value->childcate = $child; #将查到的所有下级(数组),作为新的字段存放到数组中 } return view(‘home.allcate‘,compact(‘allcate‘)); #输出到模板中 }
然后,模板显示时不需要进行查询语句
@foreach($allcate as $d) <a href="{{url(‘cate/‘.$d->cate_id)}}" target="_blank" ><h3>{{$d->cate_name}}</h3></a> <p class="dateview"> @if(count($d->childcate) != 0) @foreach($d->childcate as $cc) <span><a href="{{url(‘cate/‘.$cc->cate_id)}}">{{$cc->cate_name}}</a></span> @endforeach @else <span>暂无下级</span> @endif </p> @endforeach
总结:
1、两种方法尽量使用第二种,在控制器中进行查询,模板直接循环输出,当然这里还需要优化将查询语句放到model中,这样比较符合规范。
2、其他数据归档都可以使用这种方法,比如按时间归档,需要将归档的时间先查询出来作为新的字段放到要显示的时间里,然后输出即可
原文地址:https://www.cnblogs.com/yaradish/p/9495193.html