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

Laravel按供应商ID计算工作总分均值并存入供应商表方案

报错根因

你遇到的参数数量不足报错,核心原因是给列表加载方法tabelnilai_penyedia()新增了必填的$id入参,但绑定的路由规则里没有配置同名路由参数,Laravel无法自动解析传值,就会抛出参数缺失错误。
本质是设计逻辑偏差:供应商列表页是加载全量/分页供应商数据,不需要接收单个供应商ID作为入参,把单供应商均值计算逻辑绑定到带ID参数的列表方法上,本身就不符合列表接口的设计逻辑。

正确实现方案

1. 配置模型关联

先在供应商模型Penyedia中定义和工作表Pekerjaan的一对多关联,后续统计直接用Eloquent关联方法,避免手写SQL出错:

// app/Models/Penyedia.php
/**
* 关联供应商名下所有工作记录
* 外键字段根据你实际表结构调整,默认规则是表名_id即penyedia_id
*/
public function pekerjaans()
{
    return $this->hasMany(Pekerjaan::class, 'penyedia_id', 'id');
}

2. 封装均值更新逻辑

把单供应商的均值计算、入库逻辑抽成独立可复用的方法,不要写在列表加载方法里:

// 可以放在AdminController中作为私有方法,也可以封装到Penyedia模型中
private function hitungRataRataNilai(Penyedia $penyedia)
{
    // 统计该供应商下所有工作记录的nilai_total平均值,无工作记录时默认记0
    $nilaiRataRata = $penyedia->pekerjaans()->avg('nilai_total') ?? 0;
    // 计算结果写入供应商表对应字段,字段名替换为你表中实际存储平均分值的字段名
    $penyedia->update([
        'nilai_rata_rata' => round($nilaiRataRata, 2) // 保留小数位数按需调整
    ]);
    return $nilaiRataRata;
}

在你已经实现的工作评分更新方法update_nilaipekerjaan的末尾,拿到当前工作记录关联的供应商ID,调用上述方法即时重算对应供应商的平均分值,保证数据实时一致,不需要等访问列表页才更新:

// 在update_nilaipekerjaan方法更新完单条pekerjaan的nilai_total后加
$penyedia = Penyedia::find($pekerjaan->penyedia_id);
$this->hitungRataRataNilai($penyedia);

3. 修正列表加载方法

移除tabelnilai_penyedia方法上的$id参数,恢复方法无参的结构,直接查询供应商数据传给视图即可:

public function tabelnilai_penyedia()
{
    // 首次上线如果有历史数据未计算均值,可以放开下面的注释批量计算一次,跑完后注释掉避免每次访问列表全表计算
    // Penyedia::chunk(100, function($daftarPenyedia) {
    //     foreach($daftarPenyedia as $p) {
    //         $this->hitungRataRataNilai($p);
    //     }
    // });

    // 查询供应商列表,按需添加分页、筛选条件
    $daftarPenyedia = Penyedia::paginate(10);
    return view('路径对应你的供应商列表Blade模板', compact('daftarPenyedia'));
}

4. 修正路由配置

确保绑定到tabelnilai_penyedia方法的路由没有多余参数,常规GET路由即可:

// routes/web.php 路由配置示例
Route::get('/admin/penyedia/nilai', [AdminController::class, 'tabelnilai_penyedia'])->name('admin.penyedia.nilai');

5. 视图展示

你已经在Blade模板中预留了平均分值列,直接在对应位置输出字段值即可:

{{-- 表格对应列 --}}
<td>{{ $item->nilai_rata_rata ?? 0 }}</td>

优化提示:不要把均值计算逻辑全量放在列表访问时执行,单条工作记录更新后即时重算对应供应商的分值,性能更高,也不会出现路由参数不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:36:20