如何在 Laravel 中使用 Highcharts 创建多系列柱状图

花韻仙語

花韻仙語

2026-07-19

814人浏览

原创

如何在 Laravel 中使用 Highcharts 创建多系列柱状图

本文详解如何在 laravel 项目中正确配置 highcharts,实现按产品类别分组的多系列(多数据集)柱状图,解决因数据结构不匹配导致图表渲染失败的问题。

本文详解如何在 laravel 项目中正确配置 highcharts,实现按产品类别分组的多系列(多数据集)柱状图,解决因数据结构不匹配导致图表渲染失败的问题。

在 Laravel 中集成 Highcharts 实现多系列柱状图时,常见错误源于后端数据组织方式与前端 Highcharts API 要求不一致:Highcharts 的 series 数组需包含多个对象,每个对象代表一个数据系列(如不同产品类别的月度销量),且每个系列的 data 必须是与 X 轴月份严格对齐的数值数组。而原代码中仅用 pluck() 获取单一维度数据,无法支撑多系列结构,导致图表显示异常(如所有数据堆叠在同一柱子或空白)。

✅ 正确的数据组织方式

后端应一次性查询各分类在各月份的聚合数据,并按「月份」分组,为每个系列预留独立字段。例如,若需展示三个产品类别的月度销售总额,可使用 DB::raw() 构建带别名的聚合字段:

// app/Http/Controllers/DashboardController.php
public function index()
{
    // 按月份分组,同时计算每个类别的总销售额(此处以 category_id 区分,实际请按业务逻辑调整)
    $monthlyData = DB::table('orders')
        ->select(
            DB::raw("MONTHNAME(created_at) as bulan"),
            DB::raw("SUM(CASE WHEN category_id = 1 THEN total ELSE 0 END) as electronics"),
            DB::raw("SUM(CASE WHEN category_id = 2 THEN total ELSE 0 END) as clothing"),
            DB::raw("SUM(CASE WHEN category_id = 3 THEN total ELSE 0 END) as books")
        )
        ->whereYear('created_at', date('Y')) // 可选:限定当前年份
        ->groupBy(DB::raw("MONTH(created_at)"), 'bulan')
        ->orderBy('bulan', 'ASC') // 确保月份顺序正确(Jan→Dec)
        ->get();

    return view('admin.dashboard', compact('monthlyData'));
}

⚠️ 注意:MONTHNAME() 返回英文月份名(如 'January'),若需中文,请改用 DATE_FORMAT(created_at, '%m月') 或本地化处理;同时务必 ORDER BY 保证月份顺序,否则 X 轴将错乱。

Laravel 13.2.0
Laravel 13.2.0

PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。

下载

✅ 前端 Highcharts 配置要点

在 Blade 模板中,通过 PHP 循环动态生成 Highcharts 所需的 categories 和各 series.data:

<!-- resources/views/admin/dashboard.blade.php -->
<figure class="highcharts-figure"><div id="container" style="height: 400px;"></div>
</figure>

@push('scripts')
<script src="https://code.highcharts.com/highcharts.js"></script><script src="https://code.highcharts.com/modules/exporting.js"></script><script src="https://code.highcharts.com/modules/export-data.js"></script><script>
Highcharts.chart('container', {
    chart: { type: 'column' },
    title: { text: '各产品类别月度销售额' },
    xAxis: {
        categories: [
            @foreach($monthlyData as $item)
                '{{ $item->bulan }}',
            @endforeach
        ],
        crosshair: true
    },
    yAxis: {
        min: 0,
        title: { text: '销售额 (¥)' }
    },
    tooltip: {
        shared: true,
        useHTML: true,
        headerFormat: '<b>{point.key}<br/>',
        pointFormat: '{series.name}: <b>{point.y:.2f} ¥<br/>'
    },
    plotOptions: {
        column: {
            pointPadding: 0.1,
            borderWidth: 0
        }
    },
    series: [
        {
            name: '电子产品',
            data: [
                @foreach($monthlyData as $item)
                    {{ $item->electronics ?? 0 }},
                @endforeach
            ]
        },
        {
            name: '服装',
            data: [
                @foreach($monthlyData as $item)
                    {{ $item->clothing ?? 0 }},
                @endforeach
            ]
        },
        {
            name: '图书',
            data: [
                @foreach($monthlyData as $item)
                    {{ $item->books ?? 0 }},
                @endforeach
            ]
        }
    ],
    credits: { enabled: false }
});
</script>
@endpush

? 关键注意事项

  • 数据对齐性:X 轴 categories 与每个 series.data 的长度必须完全一致,且顺序一一对应。使用 groupBy + orderBy 是保障顺序的基础。
  • 空值处理:数据库中某月某类别无数据时,SUM(...) 返回 NULL,前端会报错。务必使用 ?? 0 提供默认值。
  • 性能优化:避免在 Blade 中嵌套复杂逻辑。如数据量大,建议在控制器中预处理为标准数组格式(如 ['categories' => [...], 'series' => [...]),再 json_encode 传递给前端。
  • 响应式适配:添加 responsive: { rules: [{ condition: { maxWidth: 500 }, chartOptions: { legend: { layout: 'horizontal' } } }] } 提升移动端体验。

通过以上结构化数据准备与精准的 Highcharts 配置,即可成功渲染出类似东京、伦敦等多城市对比的多系列柱状图——只不过您的图中将是「电子产品」「服装」「图书」等真实业务类别,清晰呈现各品类在时间维度上的表现差异。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

673

10

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

2024.04.09

649

9

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

1114

10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

1589

7

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

2025.08.05

1941

22

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

2025.08.05

1266

13

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.05

2785

7

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

2026.03.04

1087

29

Laravel 框架安装指南
Laravel 框架安装指南

本指南详解 Laravel 框架安装全流程,涵盖 PHP 8.1+ 环境配置、Composer 依赖管理工具安装及国内镜像源优化。重点演示使用 composer create-project 命令创建 Laravel 10/11 项目,解决常见安装错误与依赖冲突。从环境搭建到项目初始化,助您快速完成 Laravel 开发环境部署,为后续 Web 应用开发奠定基础。适合 PHP 初学者与框架迁移开发者参考。

2026.04.09

91

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 133人学习

Composer手册
Composer手册

共0课时 | 0人学习