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

Laravel中calculateOnTarget函数达标统计异常问题求助

Laravel 达标数统计问题排查方案

针对你遇到的calculateOnTarget函数统计错误问题,按以下步骤逐一排查:

1. 核对对比逻辑是否写反

这是最常见的错误点:达标判定应为计算交期 ≤ 标准交期,如果逻辑写反(比如写成计算交期 ≥ 标准交期),会直接导致达标/超期数颠倒。
检查函数内的判断代码,比如:

// 错误示例:条件写反
if ($calculatedLeadTime > $standardLeadTime) {
    $onTarget++;
} else {
    $overdue++;
}

// 正确示例
if ($calculatedLeadTime <= $standardLeadTime) {
    $onTarget++;
} else {
    $overdue++;
}

2. 验证数据类型与数值匹配

打印$calculatedLeadTime和$standardLeadTime的具体值及类型,确认两者可直接对比:

  • 比如计算交期返回的是字符串(如"1"),标准交期是整数(1),在PHP中虽能兼容,但如果存在小数(如"1.0"与1)或格式差异,可能导致判断异常。
  • 检查Type表的标准交期字段是否为数值类型(int/decimal),而非字符串。

3. 确认模型关联正确性

确保Production与Type模型的关联字段匹配,避免取错标准交期:
比如Production表用model字段存储型号,Type表用name字段对应型号,关联代码应写为:

// Production模型内的关联
public function type()
{
    return $this->belongsTo(Type::class, 'model', 'name');
}

如果关联字段写错(比如用了id而非name),会拿到错误型号的标准交期,导致对比失效。

4. 核对时间计算规则一致性

确认calculateLeadTime的计算规则与Type表的标准交期规则一致:

  • 比如计算交期统计的是自然日,但标准交期是工作日(排除周末/节假日),会导致数值对比偏差。
  • 检查calculateLeadTime是否用了正确的日期差计算方法,比如:
// 自然日计算
Carbon::parse($production->start_date)->diffInDays($production->end_date);

// 工作日计算(需额外处理)
Carbon::parse($production->start_date)->diffInWeekdays($production->end_date);

5. 验证原始数据准确性

直接查询数据库,确认KCMB/KCMS型号的对应数据:

  • 检查Production表中该型号记录的计算交期是否确实≤Type表的标准交期。
  • 比如执行SQL:
SELECT p.id, p.model, 
       DATEDIFF(p.end_date, p.start_date) AS calculated_lead_time,
       t.standard_lead_time
FROM productions p
JOIN types t ON p.model = t.name
WHERE p.model IN ('KCMB', 'KCMS');

对比查询结果中的calculated_lead_time和standard_lead_time,确认数据本身是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:40:02