我想為所有產品的過濾器獲取唯一值。
我的資料庫結構如下
id Product category_id format attribute
1 demo1 5 HD test1
2 demmo2 4 SD test3
3 demmo3 4 HD test2
4 demmo4 3 HD test3
我想在產品頁面中添加格式和屬性過濾器。但是在那個高清來了 3 次。我只想顯示那個。
我不知道如何只顯示一次。
下面是我的控制器代碼:
$item = Item::where('active_status', 1)->where('status', "1");
$data['item_count'] = $item;
$data['item'] = $item->paginate(20);
return view('frontend.pages.explore', compact('data'));
下面是刀片檔案
<div class="filter-btn">
@foreach($data['item'] as $resolution)
<a class="btn btn-white-outline display-4" href="">{{array_unique($resolution->format)}}</a>
@endforeach
</div>
我不知道如何僅顯示唯一值。任何人有想法然后讓我知道
uj5u.com熱心網友回復:
如果我對您的查詢是正確的,那么您需要使用 groupby 列出控制器中的專案。
$items = Item::groupBy('format')->get();
uj5u.com熱心網友回復:
由于您正在對資料進行分頁,因此您的“第一頁”可能沒有所有格式,因此您必須對資料庫進行另一個查詢:
$formats = DB::table('items')->select('format')->distinct()->get()
...
view(..., compact('data', 'formats'))
在刀片表中:
@foreach($formats as $resolution)
<a class="btn btn-white-outline display-4" href="">{{$resolution->format}}</a>
@endforeach
uj5u.com熱心網友回復:
解決方案是為Format它與 Product 或任何需要格式的模型之間的關系創建一個單獨的模型,然后從其表中獲取格式并應用預加載。
這可能看起來比您的解決方案更長,但這是出于多種原因而應采用的標準:
- 更少的 sql 查詢
- 關于我們的新桌子的更多靈活性和選擇
- 更好和更少的代碼到 crud 格式
- 單一的變化來源
- 更少的資料庫資料和更快的加載
- ...
產品.php
public function format(){
return $this->belongsTo(Format::class);
}
格式.php
public function products(){
return $this->hasMany(Product::class);
}
用法
在控制器中
// get all formts eager loaded with products
$formats = Format::with('products')->get();
//get all products
$product = Format::latest()->paginate(20);
return view('frontend.pages.explore', compact( 'products' ,'formats'));
在你看來
// all prodcuts
@foreach($formats as $format)
<a class="btn btn-white-outline display-4" href="">{{$format->name}}</a>
@endforeach
// in filter ( at clicking ) no additional query
@foreach($format->products as $product)
...
@endforeach
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/312832.html
標籤:拉拉维尔
上一篇:Laravel/Eloquent:如何在Larvael`->whereNotExists`子查詢中參考外部選擇的列?
