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');

所以,我正在寻找的结果是

惠普 3
东芝 2
联想 1

我认为可以使用 concat 进行收集,但由于我在 Laravel 5.2 上,我正在寻找其他解决方案。

4

2 回答 2

6

如果你真的想使用集合(不是 Eloquent),你可以这样做:

$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
  ]
}

正如预期的那样。

于 2017-10-11T19:36:49.190 回答
1

有一个名为 CountBy 的 Collection Helper,可以满足您的需求。

集合计数

$BrandCollection->countBy('Brand');

它将按预期返回

#items: array:3 [
    "HP" => 3
    "Toshiba" => 2
    "Lenovo" => 1
  ]

简单:D

于 2020-11-21T21:01:49.850 回答