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

如何从Laravel查询结果中提取唯一年份用于ApexCharts分类

解决Laravel查询结果适配ApexCharts的年份重复问题

问题分析

你当前的数据结构是按采购类型分组,每个类型下仅包含有数据的年份,导致ApexCharts渲染时每个系列的x轴分类不统一,出现重复年份。需要先提取全局唯一的年份数组作为统一x轴,再重构每个采购类型的数据,缺失年份补0。

解决方案步骤

1. 提取全局唯一年份

合并两个查询结果的所有年份,去重后排序:

// 假设$queryPengadaanTender是你对应pengadaanTender的数据源查询
$allYears = collect(array_merge(
    $queryPengadaanNonTender->pluck('tahun')->toArray(),
    $queryPengadaanTender->pluck('tahun')->toArray()
))->unique()->sort()->values()->toArray();

2. 重构非招标采购数据结构

去掉冗余的集合分组操作,整理成ApexCharts兼容的格式:

$pengadaanNonTender = $queryPengadaanNonTender->groupBy('pengadaan')->map(function ($group) use ($allYears) {
    // 将当前组的年份与数量转为键值对映射
    $yearCountMap = $group->pluck('jml', 'tahun')->toArray();
    
    // 按全局年份数组生成对应数据,无数据的年份补0
    return collect($allYears)->map(function ($year) use ($yearCountMap) {
        return $yearCountMap[$year] ?? 0;
    })->toArray();
})->toArray();

3. 重构招标采购数据结构

用相同逻辑处理招标采购数据:

$pengadaanTender = $queryPengadaanTender->groupBy('pengadaan')->map(function ($group) use ($allYears) {
    $yearCountMap = $group->pluck('jml', 'tahun')->toArray();
    
    return collect($allYears)->map(function ($year) use ($yearCountMap) {
        return $yearCountMap[$year] ?? 0;
    })->toArray();
})->toArray();

4. 适配ApexCharts配置

将处理后的数据传递给图表,示例前端配置:

const options = {
    xaxis: {
        categories: [2022, 2023] // 对应后端生成的$allYears数组
    }
};

const series = [
    // 非招标系列示例
    {
        name: 'Pengadaan Langsung - Barang',
        data: [9, 20] // 对应pengadaanNonTender['Pengadaan Langsung - Barang']
    },
    // 招标系列示例
    {
        name: 'Tender-Konstruksi',
        data: [11, 20] // 对应pengadaanTender['Tender-Konstruksi']
    }
];

关键优化点

  • 移除原代码中冗余的$queryPengadaanNonTender->groupBy('pengadaan','tahun'):数据库查询已完成分组,集合层面重复分组会导致结构冗余。
  • 统一x轴分类:确保所有系列的数据长度与年份数组一致,缺失年份补0,彻底避免图表渲染时的年份重复问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:51:38