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

如何用Laravel Eloquent Model实现指定列值统计SQL查询?

Laravel Eloquent 实现指定原生SQL查询的修正方案

需求原生SQL

SELECT
  <column_name>,
  COUNT(<column_name>) AS `value_occurrence` 

FROM
  <my_table>

GROUP BY 
  <column_name>

ORDER BY 
  `value_occurrence` DESC

LIMIT 1;

你的错误代码

TestModel::select('column_name', 'COUNT(column_name) AS occurrences')
           ->groupBy('column_name')
           ->orderBy('occurences')
           ->limit(10)
           ->get();

修正后的代码(多种写法)

写法一:修正原代码的问题

use Illuminate\Support\Facades\DB;

TestModel::select('column_name', DB::raw('COUNT(column_name) AS occurrences'))
    ->groupBy('column_name')
    ->orderBy('occurrences', 'desc')
    ->limit(1)
    ->first();

写法二:使用selectRaw简化

TestModel::selectRaw('column_name, COUNT(column_name) AS occurrences')
    ->groupBy('column_name')
    ->orderByDesc('occurrences')
    ->limit(1)
    ->first();

写法三:拆分select语句

TestModel::groupBy('column_name')
    ->select('column_name')
    ->selectRaw('COUNT(column_name) AS occurrences')
    ->orderByDesc('occurrences')
    ->first();

关键修正点

  • 聚合函数处理:直接在select里写COUNT(column_name)会被Laravel解析为字段名,需要用DB::raw()或selectRaw()包裹,确保SQL正确执行
  • 拼写错误:orderBy里的occurences少了一个字母r,修正为occurrences
  • 排序方向:原生SQL要求降序排序,需添加desc参数,或用orderByDesc()方法
  • 结果数量:原生SQL限制返回1条,将limit(10)改为limit(1)
  • 结果获取:用first()替代get(),直接返回单个模型实例,而非包含单个模型的集合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:15:44