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
相关产品推荐
相关产品推荐

