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

Laravel 8中统计含三种值的列数据并分卡片展示的方法

实现Laravel 8中统计result列状态并展示的方法

一、后端数据统计

有两种高效的方式获取统计数据:

方式1:一次性查询统计所有状态(推荐,减少数据库请求)

在你的控制器(比如DashboardController)中,通过groupBy和聚合函数一次性拉取三种状态的数量:

use Illuminate\Support\Facades\DB;

public function index()
{
    // 替换your_table为实际数据表名
    $resultStats = DB::table('your_table')
        ->select('result', DB::raw('count(*) as total'))
        ->groupBy('result')
        ->pluck('total', 'result')
        ->toArray();

    // 处理可能缺失的状态,默认数量设为0
    $stats = [
        'accepted' => $resultStats['accepted'] ?? 0,
        'refused' => $resultStats['refused'] ?? 0,
        'pending' => $resultStats['pending'] ?? 0,
    ];

    return view('dashboard', compact('stats'));
}

如果有对应Eloquent模型(比如Application),也可以用模型查询:

use App\Models\Application;

$resultStats = Application::select('result', DB::raw('count(*) as total'))
    ->groupBy('result')
    ->pluck('total', 'result')
    ->toArray();

方式2:分别查询每个状态(适合简单场景)

如果觉得groupBy逻辑复杂,也可以单独查询每个状态的数量:

$acceptedCount = DB::table('your_table')->where('result', 'accepted')->count();
$refusedCount = DB::table('your_table')->where('result', 'refused')->count();
$pendingCount = DB::table('your_table')->where('result', 'pending')->count();

return view('dashboard', compact('acceptedCount', 'refusedCount', 'pendingCount'));

二、前端卡片展示

假设用Bootstrap构建页面,在视图文件(比如resources/views/dashboard.blade.php)中可以这样写:

<div class="row">
    <!-- 已通过状态卡片 -->
    <div class="col-md-4 mb-4">
        <div class="card bg-success text-white">
            <div class="card-body">
                <h5 class="card-title">已通过</h5>
                <p class="card-text display-4">{{ $stats['accepted'] }}</p>
            </div>
        </div>
    </div>

    <!-- 已拒绝状态卡片 -->
    <div class="col-md-4 mb-4">
        <div class="card bg-danger text-white">
            <div class="card-body">
                <h5 class="card-title">已拒绝</h5>
                <p class="card-text display-4">{{ $stats['refused'] }}</p>
            </div>
        </div>
    </div>

    <!-- 待处理状态卡片 -->
    <div class="col-md-4 mb-4">
        <div class="card bg-warning text-dark">
            <div class="card-body">
                <h5 class="card-title">待处理</h5>
                <p class="card-text display-4">{{ $stats['pending'] }}</p>
            </div>
        </div>
    </div>
</div>

如果用方式2的单独变量,把{{ $stats['accepted'] }}替换为{{ $acceptedCount }}即可。

注意事项

  • 确保数据表中result字段的取值和查询字符串完全匹配(注意大小写、空格等细节)
  • 如果数据无需实时更新,可通过Laravel缓存功能减少数据库压力:
$stats = Cache::remember('result_stats', 3600, function () {
    // 这里放入统计逻辑
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:57:21