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

Laravel中如何将指定MySQL查询转换为Uptime模型查询?

解决Laravel Uptime模型的分组计数查询问题

你的原始MySQL查询是要按server_id分组,统计每个服务器对应的离线记录数(online=0),之前的get()写法只是获取所有符合条件的单条记录,没有实现分组和计数的核心逻辑。

这里给你两种对应的Laravel模型查询写法,都能完美匹配你的需求:

方法一:直接对应原始SQL的写法

使用selectRaw来包含原生的聚合函数和字段别名,再结合groupBy实现分组:

Uptime::selectRaw('server_id, COUNT(*) as status')
    ->where('online', 0)
    ->groupBy('server_id')
    ->get();
  • selectRaw('server_id, COUNT(*) as status'):直接映射你SQL里的SELECT server_id, COUNT(*) status,用as status给计数结果起别名,方便后续通过$item->status获取统计值
  • where('online', 0):过滤出离线状态的记录,对应SQL的WHERE online = 0
  • groupBy('server_id'):按服务器ID分组聚合,对应SQL的GROUP BY server_id
  • get():执行查询并返回包含分组统计结果的集合

方法二:简化获取键值对的写法

如果你的需求是直接得到以server_id为键、计数为值的关联数组,可以用pluck结合DB::raw:

// 记得先引入DB门面
use Illuminate\Support\Facades\DB;

$offlineCounts = Uptime::where('online', 0)
    ->groupBy('server_id')
    ->pluck(DB::raw('COUNT(*)'), 'server_id');

这样$offlineCounts会是类似[1 => 5, 2 => 3]的数组,直接通过服务器ID就能拿到对应的离线记录数,适合需要快速键值映射的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:35:27