Laravel 5.4 : 统计每个类别中的产品并按 Eloquent 查询排序
Laravel 5.4 : count the products in each category and sort them by Eloquent query
我有两个Models
一个是Product
另一个是ProductCategory
我和两者都有关系
产品型号
public function productCategory() {
return $this->belongsTo( ProductCategory::class, 'product_category_id' );
}
产品类别型号
public function categoryProduct() {
return $this->hasMany( Product::class, 'product_category_id' );
}
现在每个类别都有一些产品,例如 (cat-1 has 3 products, cat-2 has 7 products, cat-3 has 5 products)
。
我需要一个 Eloquent query
,它将得到 4 个类别,按每个类别中的产品数量排序。
例如
cat-2 has 7 products
cat-3 has 5 products
cat-1 has 3 products
tahnks
假设您将 $categories
作为一个集合,那么您可以定义一个自定义的按函数排序
$categories = ProductCategory::all()->with('categoryProduct'); //which will fetch you all categories with products
$sorted = $categories->sortBy(function ($category, $key) {
return count($category);
});
使用 withCount() and then orderBy() 与 single
查询一起使用。
ProductCategory::with('categoryProduct')->withCount('categoryProduct')->orderBy('category_product_count','desc')->get();
只获取计数
ProductCategory::withCount('categoryProduct')->orderBy('category_product_count','desc')->get();
那你可以试试:
$rows= ProductCategory::withCount('categoryProduct')->get();
您可以通过以下方式访问:
foreach ($rows as $row) {
echo $row->categoryProduct_count;
}
这是纯粹的eloquent
我有两个Models
一个是Product
另一个是ProductCategory
我和两者都有关系
产品型号
public function productCategory() {
return $this->belongsTo( ProductCategory::class, 'product_category_id' );
}
产品类别型号
public function categoryProduct() {
return $this->hasMany( Product::class, 'product_category_id' );
}
现在每个类别都有一些产品,例如 (cat-1 has 3 products, cat-2 has 7 products, cat-3 has 5 products)
。
我需要一个 Eloquent query
,它将得到 4 个类别,按每个类别中的产品数量排序。
例如
cat-2 has 7 products
cat-3 has 5 products
cat-1 has 3 products
tahnks
假设您将 $categories
作为一个集合,那么您可以定义一个自定义的按函数排序
$categories = ProductCategory::all()->with('categoryProduct'); //which will fetch you all categories with products
$sorted = $categories->sortBy(function ($category, $key) {
return count($category);
});
使用 withCount() and then orderBy() 与 single
查询一起使用。
ProductCategory::with('categoryProduct')->withCount('categoryProduct')->orderBy('category_product_count','desc')->get();
只获取计数
ProductCategory::withCount('categoryProduct')->orderBy('category_product_count','desc')->get();
那你可以试试:
$rows= ProductCategory::withCount('categoryProduct')->get();
您可以通过以下方式访问:
foreach ($rows as $row) {
echo $row->categoryProduct_count;
}
这是纯粹的eloquent