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

Laravel查询构建器实现指定SQL语句时对应何种控制器?

Laravel查询构建器实现指定GROUP BY/COUNT查询的控制器示例

Laravel并没有固定对应这类统计查询的“特定控制器”,你可以在任意自定义控制器(比如专门处理票务相关逻辑的TicketController)中编写方法来实现这个SQL功能。

以下是具体的控制器方法实现,完全对应你给出的SQL语句:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;

class TicketController extends Controller
{
    public function getCustomerTicketCounts()
    {
        $customerCounts = DB::table('ticket_table')
            ->select('CUSTOMER', DB::raw('COUNT(USER_ID) as user_count'))
            ->groupBy('CUSTOMER')
            ->orderBy('user_count', 'desc')
            ->limit(10)
            ->get();

        // 可根据需求返回视图、JSON等格式结果
        return response()->json($customerCounts);
    }
}

代码对应说明:

  • DB::table('ticket_table') 指定操作的数据表,对应原SQL的FROM ticket_table
  • select('CUSTOMER', DB::raw('COUNT(USER_ID) as user_count')):选择CUSTOMER字段,用DB::raw()执行原生统计函数并给结果起别名user_count,方便后续排序调用
  • groupBy('CUSTOMER') 对应原SQL的GROUP BY CUSTOMER
  • orderBy('user_count', 'desc') 对应原SQL的ORDER BY COUNT(USER_ID) DESC
  • limit(10) 对应原SQL的LIMIT 10
  • get() 执行查询并返回结果集合

如果遵循MVC架构规范,也可以把查询逻辑封装到模型中,再在控制器里调用:

// App/Models/Ticket.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Ticket extends Model
{
    protected $table = 'ticket_table';

    public static function getTopCustomerCounts()
    {
        return self::select('CUSTOMER', \DB::raw('COUNT(USER_ID) as user_count'))
            ->groupBy('CUSTOMER')
            ->orderBy('user_count', 'desc')
            ->limit(10)
            ->get();
    }
}

// 控制器中调用
public function getCustomerTicketCounts()
{
    $customerCounts = \App\Models\Ticket::getTopCustomerCounts();
    return response()->json($customerCounts);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:58:01