我有以下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。
谢谢!
答案 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;
}
}
}
只是一个指南。
希望它有所帮助。