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 = 0groupBy('server_id'):按服务器ID分组聚合,对应SQL的GROUP BY server_idget():执行查询并返回包含分组统计结果的集合
方法二:简化获取键值对的写法
如果你的需求是直接得到以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
相关产品推荐
相关产品推荐

