use*_*497 1 php laravel laravel-5 laravel-collection laravel-5.2
我试图从我的产品表中获取独特品牌的数量,以及来自 Laravel 集合的数量。
我能够使用产品的特定查询来做到这一点,但我现在使用集合的原因是因为我还想获得产品的产品来源(国家/地区)、条件(使用/新),我认为它使用来自一个查询的集合会更好,而不是对每个数据使用三个单独的查询。
下面的代码有效,但没有显示每个唯一品牌的计数。
这是我的控制器
$products = DB::table('products')
->select('products.*')
->whereNull('products.deleted_at')
->get();
$BrandCollection = collect($products);
$Brands = $BrandCollection->unique('Brand')->sortBy('Brand')->keyBy('Brand')->pluck('Brand');
Run Code Online (Sandbox Code Playgroud)
所以,我正在寻找的结果是
惠普 3
东芝 2
联想 1
我认为可以使用 concat 来完成集合,但由于我使用的是 Laravel 5.2,我正在寻找其他解决方案。
如果你真的想使用集合(不是 Eloquent),你可以这样做:
$brandsWithCount = $BrandCollection->groupBy('Brand')->map(function($values) {
return $values->count();
})->sort()->reverse();
Run Code Online (Sandbox Code Playgroud)
例如,如果您这样设置$brandCollection:
$BrandCollection = collect([
['Brand' => 'HP'],
['Brand' => 'HP'],
['Brand' => 'HP'],
['Brand' => 'Toshiba'],
['Brand' => 'Toshiba'],
['Brand' => 'Lenovo'],
]);
Run Code Online (Sandbox Code Playgroud)
结果将是:
Collection {#372
#items: array:3 [
"HP" => 3
"Toshiba" => 2
"Lenovo" => 1
]
}
Run Code Online (Sandbox Code Playgroud)
正如预期的那样。
| 归档时间: |
|
| 查看次数: |
2742 次 |
| 最近记录: |