我有以下两个表:
Ad:{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。
谢谢!
发布于 2017-03-19 04:19:20
这不是一个解决方案,而是一个领先的开始。假设您在Category模型中已经将关系集设置为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;
}
}
}只是一个向导。
希望能有所帮助。
https://stackoverflow.com/questions/42879147
复制相似问题