Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取Laravel 5.2集合中具有列名的唯一值的计数_Php_Laravel_Laravel 5_Laravel 5.2_Laravel Collection - Fatal编程技术网

Php 获取Laravel 5.2集合中具有列名的唯一值的计数

Php 获取Laravel 5.2集合中具有列名的唯一值的计数,php,laravel,laravel-5,laravel-5.2,laravel-collection,Php,Laravel,Laravel 5,Laravel 5.2,Laravel Collection,我试图从我的产品表中获得独特品牌的数量,并从Laravel系列中获得它们的数量 我可以使用产品的特定查询来实现这一点,但我现在使用集合的原因是,我还想获得产品的原产国、使用/新产品的条件,我认为最好使用一个查询的集合,而不是对每个数据进行三个单独的查询 下面的代码可以工作,但没有显示每个独特品牌的数量 这是桌子 这是我的控制器 $products = DB::table('products') ->select('products.*') ->whereNull('produc

我试图从我的产品表中获得独特品牌的数量,并从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,我正在寻找其他解决方案。

如果您真的想使用没有说服力的收集,可以这样做:

$brandsWithCount = $BrandCollection->groupBy('Brand')->map(function($values) {
    return $values->count();
})->sort()->reverse();
$BrandCollection = collect([
    ['Brand' => 'HP'],
    ['Brand' => 'HP'],
    ['Brand' => 'HP'],
    ['Brand' => 'Toshiba'],
    ['Brand' => 'Toshiba'],
    ['Brand' => 'Lenovo'],
]);
例如,如果将$brandCollection设置为:

$brandsWithCount = $BrandCollection->groupBy('Brand')->map(function($values) {
    return $values->count();
})->sort()->reverse();
$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
  ]
}

正如所料。

如果你真的想使用没有说服力的集合,你可以这样做:

$brandsWithCount = $BrandCollection->groupBy('Brand')->map(function($values) {
    return $values->count();
})->sort()->reverse();
$BrandCollection = collect([
    ['Brand' => 'HP'],
    ['Brand' => 'HP'],
    ['Brand' => 'HP'],
    ['Brand' => 'Toshiba'],
    ['Brand' => 'Toshiba'],
    ['Brand' => 'Lenovo'],
]);
例如,如果将$brandCollection设置为:

$brandsWithCount = $BrandCollection->groupBy('Brand')->map(function($values) {
    return $values->count();
})->sort()->reverse();
$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
  ]
}

正如预期的那样。

有一个名为CountBy的集合帮助程序,它完全满足您的需要

它会如期而至

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

简单:D

有一个名为CountBy的集合帮助程序,它完全满足您的需要

它会如期而至

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

简单:D

完美!工作很有魅力。你会如何应用排序?因为-sort'Brand->reverse不能work@user3659497它对我有用,你验证过了吗?排序应该按升序排序,反向排序将反转顺序不知道为什么,但它不起作用,我在groupBy之前添加了排序,并删除了最后一个->排序->反向排序,它现在起作用了$Brands=$BrandCollection->sortBy'Brand'->groupBy'Brand'->mapfunction$values{return$values->count;};感谢上面的代码工作得很好,我可以在视图中添加集合,但我不知道如何在表中显示最终结果,因为@foreach循环只显示数值。我需要显示名称-值对。您是如何显示上面生成的集合的结果的?太好了!工作很有魅力。你会如何应用排序?因为-sort'Brand->reverse不能work@user3659497它对我有用,你验证过了吗?排序应该按升序排序,反向排序将反转顺序不知道为什么,但它不起作用,我在groupBy之前添加了排序,并删除了最后一个->排序->反向排序,它现在起作用了$Brands=$BrandCollection->sortBy'Brand'->groupBy'Brand'->mapfunction$values{return$values->count;};感谢上面的代码工作得很好,我可以在视图中添加集合,但我不知道如何在表中显示最终结果,因为@foreach循环只显示数值。我需要显示名称-值对。您如何显示上面生成的集合的结果?