Laravel |获取类别中的项目数

时间:2017-03-18 19:54:58

标签: php mysql laravel laravel-5 laravel-5.4

我有以下2个表:

广告:{id,title,category_id}类别:{id,name,parent_id}

表1:广告

---|----------------------------|------------
id | title                      | category_id
---|----------------------------|------------
1  | Ad in Cars category        | 2
2  | Another Ad in Cars category| 2
3  | Ad in Vehicles category    | 1 

表2:类别

---|-----------|-----------
id | name      | parent_id
---|-----------|-----------
1  | Vehicles  | NULL
2  | Cars      | 1 

现在我需要获取每个类别中的广告类别和数量。此外,如果某个类别的子类别中包含广告,那么父类别的广告数量也应包含属于子类别的广告。

因此,如果我在车辆类别中获取广告数量,我应该得到:

Category | Count
---------|-----------
Vehicles | 3

如果我在汽车类别中获取广告数量,我应该得到:

Category | Count
---------|-----------
Cars     | 2

我如何在Laravel实现这一目标?我正在使用Laravel 5.4。

谢谢!

1 个答案:

答案 0 :(得分:0)

不是解决方案,而是先发制人。假设您已将类别模型中的关系设置为hasMany(Ad),则可以执行

$categories = Category::withCount('ads')->get();

这将为您提供所有类别的“广告”。你可以这样显示

foreach($categories as $category) {
    echo $category->ads_count; //Pay attention to _count here appended to 'adds'
}

然后我想你可以做所有类别的foreach循环,看看它们是否相关并增加它们的项目数。 e.g:

foreach($categories as $category) {
    if ( $category->subCategories ) {
        foreach( $category->subCategories as $sub) {
            $category->ads_count += $sub->ads_count;
        }
    }
}

只是一个指南。
希望它有所帮助。