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

doc link

使用 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