Laravel查询中如何按条件统计带有图片的子分类数量
实现方案
你可以直接利用Laravel集合的内置方法完成统计,以下是两种常用实现方式:
方法1:filter 过滤后计数
遍历所有子分类,通过封装的校验方法筛选出带图片的分类后直接统计数量,逻辑直观易懂:
$subcategories = App\subcategories::where('categories_id',$category->id)->get(); // 过滤出带图片的子分类 $hasImageSubcategories = $subcategories->filter(function ($eachsubcat) { return Helper::checkifImage($eachsubcat->id); }); // 统计符合条件的总数 $hasImageCount = $hasImageSubcategories->count();
方法2:sum 方法直接求和(写法更简洁)
由于Helper::checkifImage返回布尔值,true会被自动转换为1、false转换为0,直接求和即可得到符合条件的总数:
$subcategories = App\subcategories::where('categories_id',$category->id)->get(); // PHP 7.4及以上版本支持箭头函数写法 $hasImageCount = $subcategories->sum(fn($eachsubcat) => Helper::checkifImage($eachsubcat->id));
如果运行环境PHP版本低于7.4,替换为匿名函数写法即可:
$hasImageCount = $subcategories->sum(function ($eachsubcat) { return Helper::checkifImage($eachsubcat->id); });
性能优化建议
如果后续子分类量级持续增长(超过1000条),可将图片存在状态冗余到子分类表中并加索引,查询时直接通过SQL的where条件统计,避免遍历全量数据调用校验方法,可大幅提升统计性能。
内容的提问来源于stack exchange,提问作者Anonymous Girl
相关产品推荐
相关产品推荐

