You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Eloquent中统计数据库字段值出现频次的方法(初学者求助)

解决Laravel Eloquent统计不同number值出现次数的问题

嘿,作为Laravel初学者碰到这个问题很正常,我来给你捋捋两种实用的解决方式:

1. 单个number值的统计(用count())

你完全可以用->count()方法来统计单个特定number的记录数,用法非常直接:

// 统计number=1的记录数量
$count1 = Data::where('number', 1)->count();

// 同理,统计number=15的数量
$count15 = Data::where('number', 15)->count();

这个方法会生成对应的SQL计数查询,直接返回数字结果,完全能满足单个值的统计需求。

2. 批量统计多个number值的高效方式

如果要一次性统计多个number值(比如1、15、55)的出现次数,多次调用where()->count()会发起多次数据库请求,效率偏低。这时候用分组查询+聚合函数只需要一次请求就能搞定,更高效:

方式一:统计所有不同number的出现次数

如果你想知道数据库里所有number值各自的出现次数,可以这么写:

$numberCounts = Data::groupBy('number')
    ->selectRaw('number, COUNT(*) as occurrence_count')
    ->get();

返回的$numberCounts是一个Eloquent集合,每个元素包含number和对应的统计次数(字段名occurrence_count你可以自定义),示例结果大概是:

[
    ['number' => 1, 'occurrence_count' => 5],
    ['number' => 15, 'occurrence_count' => 3],
    ['number' => 55, 'occurrence_count' => 7],
    // ...其他number值的统计数据
]

方式二:只统计指定的number值

如果只需要统计你指定的几个number(比如1、15、55),可以加上whereIn过滤范围:

$targetNumbers = [1, 15, 55];
$specificCounts = Data::whereIn('number', $targetNumbers)
    ->groupBy('number')
    ->selectRaw('number, COUNT(*) as occurrence_count')
    ->get();

这样返回的结果就只包含你指定的那几个number的统计数据,而且全程只需要一次数据库查询,比多次单独count高效得多。

补充小提示

你Model里设置的$guarded、$fillable、$casts这些规则不会影响这些查询操作,因为我们只是读取统计数据,和批量赋值的规则无关。

内容的提问来源于stack exchange,提问作者trafers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:34:07