You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel框架Blade模板中如何获取产品筛选字段的去重唯一值

解决方案

你现有代码存在两个核心问题:

  • 遍历的是分页后的产品列表,就算做去重也只能拿到当前页的format值,无法覆盖全量产品的可选筛选值
  • array_unique()是数组去重方法,你传入的是单个字符串$resolution->format,完全起不到去重效果

第一步:控制器中查询全量去重的筛选字段值

直接用查询构造器的distinct()方法获取去重后的字段值,同时支持查询format和attribute两个筛选维度,修改后控制器代码如下:

$itemQuery = Item::where('active_status', 1)->where('status', "1");
// 原有产品分页逻辑,注意原代码$item_count直接赋值查询构造器是错误的,需要调用count()获取总数
$data['item_count'] = $itemQuery->count();
$data['item'] = $itemQuery->paginate(20);
// 新增全量去重筛选值查询
$data['filters']['formats'] = $itemQuery->distinct()->pluck('format')->toArray();
$data['filters']['attributes'] = $itemQuery->distinct()->pluck('attribute')->toArray();

return view('frontend.pages.explore', compact('data'));

第二步:Blade模板遍历去重后的筛选值

直接遍历控制器已经处理好的去重数组即可,不需要在前端做额外去重逻辑:

<!-- format筛选器 -->
<div class="filter-btn">
  @foreach($data['filters']['formats'] as $format)
      <a class="btn btn-white-outline display-4" href="">{{ $format }}</a>
  @endforeach
</div>
<!-- attribute筛选器 -->
<div class="filter-btn">
  @foreach($data['filters']['attributes'] as $attribute)
      <a class="btn btn-white-outline display-4" href="">{{ $attribute }}</a>
  @endforeach
</div>

可选优化:带产品数量统计的筛选值

如果需要展示每个筛选值对应的产品数量,可以改用groupBy写法:

  • 控制器查询代码:
$data['filters']['formats'] = $itemQuery->select('format', \DB::raw('count(*) as count'))
    ->groupBy('format')
    ->get()
    ->toArray();
  • Blade输出代码:
<a class="btn btn-white-outline display-4" href="">{{ $format['format'] }} ({{ $format['count'] }})</a>

内容的提问来源于stack exchange,提问作者Praful

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:48:03