2017-10-11 31 views
0

我試圖從Laravel集合中計算我的產品表中的獨特品牌數。獲取Laravel 5.2中列名稱的唯一值的計數集合

我能夠做到這一點使用產品的特定查詢,但我現在使用集合的原因是因爲我也想獲得產品的起源(國家),條件(使用/新)的產品我認爲使用來自一個查詢的集合而不是針對每個數據有三個單獨的查詢會好得多。

下面的代碼工作,但它不顯示每個獨特品牌的計數。

這裏是表 enter image description here

這裏是我的控制器

$products = DB::table('products') 
->select('products.*') 
->whereNull('products.deleted_at') 
->get(); 

$BrandCollection = collect($products); 
$Brands = $BrandCollection->unique('Brand')->sortBy('Brand')->keyBy('Brand')->pluck('Brand'); 

所以,我在找的結果是

HP 3
東芝2
聯想1

我認爲可以使用concat進行收集,但由於我在Laravel 5.2上,我正在尋找其他解決方案。

回答

0

如果你真的想使用集合(不佞),你可以做這樣的:

$brandsWithCount = $BrandCollection->groupBy('Brand')->map(function($values) { 
    return $values->count(); 
})->sort()->reverse(); 

例如,如果你設置$brandCollection這樣的:

$BrandCollection = collect([ 
    ['Brand' => 'HP'], 
    ['Brand' => 'HP'], 
    ['Brand' => 'HP'], 
    ['Brand' => 'Toshiba'], 
    ['Brand' => 'Toshiba'], 
    ['Brand' => 'Lenovo'], 
]); 

結果將是:

Collection {#372 
    #items: array:3 [ 
    "HP" => 3 
    "Toshiba" => 2 
    "Lenovo" => 1 
    ] 
} 

如預期的那樣。

+0

完美!像魅力一樣工作。 – user3659497

+0

你會如何應用排序? Coz-sort('Brand) - > reverse()不起作用 – user3659497

+0

@ user3659497它對我有用,你有沒有驗證它? 'sort'應該按升序排序,'reverse'將排序順序 –