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

如何通过Eloquent实现物品数据统计并传递至报表页面?

Laravel Eloquent 实现高效报表数据统计

控制器逻辑

直接利用Eloquent的聚合查询在数据库层面完成统计,避免拉取全量数据循环计算,大幅提升效率。

<?php

namespace App\Http\Controllers;

use App\Models\Item;
use Illuminate\View\View;

class ReportController extends Controller
{
    public function index(): View
    {
        // 方案1:分开执行两个聚合查询
        $uniqueItemsCount = Item::distinct()->count('id'); // 按id统计唯一物品,按需替换为sku/name等字段
        $totalQuantity = Item::sum('quantity');

        // 方案2:合并为单次数据库查询(更高效)
        $stats = Item::selectRaw('COUNT(DISTINCT id) as unique_items_count, SUM(quantity) as total_quantity')
                     ->first();

        // 传递数据到视图(二选一即可)
        return view('reports.index', compact('uniqueItemsCount', 'totalQuantity'));
        // return view('reports.index', [
        //     'uniqueItemsCount' => $stats->unique_items_count,
        //     'totalQuantity' => $stats->total_quantity
        // ]);
    }
}

视图展示(reports/index.blade.php)

将两个统计值并排渲染,可通过CSS调整布局样式:

<div class="report-container">
    <div class="stat-block">
        <h4>唯一物品总数</h4>
        <span class="stat-number">{{ $uniqueItemsCount }}</span>
    </div>
    <div class="stat-block">
        <h4>物品总数量</h4>
        <span class="stat-number">{{ $totalQuantity }}</span>
    </div>
</div>

<style>
.report-container {
    display: flex;
    gap: 2rem;
    padding: 1rem;
}
.stat-block {
    padding: 1.5rem;
    border: 1px solid #eee;
    border-radius: 8px;
    min-width: 200px;
    text-align: center;
}
.stat-number {
    font-size: 2rem;
    font-weight: bold;
    color: #2c3e50;
}
</style>

注意事项

  • 若唯一物品的判断依据是特定业务字段(如sku、商品名称),将COUNT(DISTINCT id)中的id替换为对应字段即可
  • 合并查询的方案仅需一次数据库请求,数据量较大时优先选用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 01:24:52