Laravel 5.4:计算每个类别中的产品并按Eloquent查询对它们进行排序

时间:2018-04-03 10:24:13

标签: php laravel laravel-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

3 个答案:

答案 0 :(得分:2)

使用withCount()然后使用orderBy()进行single查询。

ProductCategory::with('categoryProduct')->withCount('categoryProduct')->orderBy('category_product_count','desc')->get();

获得计数

ProductCategory::withCount('categoryProduct')->orderBy('category_product_count','desc')->get();

答案 1 :(得分:0)

假设您将$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

答案 2 :(得分:0)

然后你可以尝试:

$rows= ProductCategory::withCount('categoryProduct')->get();

您可以通过以下方式访问:

foreach ($rows as $row) {
echo $row->categoryProduct_count;
}

这是纯粹的雄辩