php - 拉维尔 |获取类别中的项目计数

标签 php mysql laravel laravel-5 laravel-5.4

我有以下 2 个表:

广告:{id、标题、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。

谢谢!

最佳答案

这不是解决方案,而是一个良好的开端。假设您已在类别模型中将关系设置为 hasMany(Ad),您可以这样做

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

这将为您提供所有类别及其“广告”数量。可以这样显示

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

然后我想你可以对所有类别进行 foreach 循环,看看它们是否相关并增加它们的项目计数。例如:

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

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

关于php - 拉维尔 |获取类别中的项目计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42879147/

相关文章:

java - 使用 preparedStatement 设置 mysql 主键字段时出错

mysql - Oracle 中是否有 Translate() 的 MySQL 等效项

php - Laravel Carbon 秒到 forHumans

laravel - 使用 Composer 命令将 Laravel 包播种到 Sqlite 以进行代码接收

php - 如何处理 Laravel 的 SMTP 驱动程序中的自签名 TLS 证书?

php - 如何避免向每个 .html 页面添加相同的导航栏模板

mysql - 如何在 docker-compose.yml 中使用多行命令标志配置 MySQL 实例

javascript - laravel 中的 DELETE 请求

php - 使用 PHP-memcache 针对 memcached 进行 session 故障转移

php - php : 1000 fields per POST. 内的新限制有人知道,如果数字会受到影响吗?