Laravel Eloquent查询:统计语言ID提交次数并返回关联数组
Laravel Eloquent 按语言ID统计提交次数
直接通过分组查询+pluck方法就能生成你需要的键值对数组:
$user_lang = Submission::query() ->groupBy('language') ->selectRaw('language, COUNT(*) as submission_count') ->pluck('submission_count', 'language') ->toArray();
代码说明:
groupBy('language'):按语言ID字段分组selectRaw('language, COUNT(*) as submission_count'):查询语言ID和对应分组的提交次数pluck('submission_count', 'language'):将语言ID设为数组键,提交次数设为对应值,返回Collection对象toArray():将Collection转换为普通关联数组,最终得到['56'=>5,'45'=>7,'71'=>10]格式
如果需要仅统计指定的语言ID(比如56、45、71),可以添加whereIn过滤条件:
$targetLanguages = [56, 45, 71]; $user_lang = Submission::query() ->whereIn('language', $targetLanguages) ->groupBy('language') ->selectRaw('language, COUNT(*) as submission_count') ->pluck('submission_count', 'language') ->toArray();
如果要求所有指定语言ID都出现在数组中,无提交记录的显示0,可以结合array_fill_keys初始化默认值:
$targetLanguages = [56, 45, 71]; $defaultCounts = array_fill_keys($targetLanguages, 0); $user_lang = Submission::query() ->whereIn('language', $targetLanguages) ->groupBy('language') ->selectRaw('language, COUNT(*) as submission_count') ->pluck('submission_count', 'language') ->toArray(); // 合并默认值,确保所有目标ID都存在 $user_lang = array_merge($defaultCounts, $user_lang);
内容的提问来源于stack exchange,提问作者Erfan Ahmed Siam
相关产品推荐
相关产品推荐

