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

Laravel 8 用if语句条件更新数据库记录 空值保留方案

解决方案

你原有代码的问题在于直接对所有可空字段调用floatval()转换,而floatval(null)会返回0,即使请求参数为null,也会把数据库中原有的null值覆盖为0。另外你提到数据表没有主键,这一点不影响更新逻辑,你已经通过nim字段作为查询条件定位目标记录,完全可以正常执行更新。
实现逻辑如下:

  • 先初始化更新数组,存入所有必填、每次都要更新的字段
  • 逐个判断n1到n5的请求值,仅当值不为null时,才将对应字段加入更新数组
  • 最后用构造完成的数组执行更新即可

修改后的完整代码如下:

public function store_upd_nilai_uji_program(Request $request)
{
    $validated = $request->validate([
        'nip'       => 'required|numeric|digits_between:18,18',
        'n1'        => 'nullable|numeric',
        'n2'        => 'nullable|numeric',
        'n3'        => 'nullable|numeric',
        'n4'        => 'nullable|numeric',
        'n5'        => 'nullable|numeric',
        'n6'        => 'required|numeric',
        'tanggal'   => 'required',
        'waktu'     => 'required',
    ]);

    // 构造固定更新的必填字段
    $updateData = [
        'nip'     => $request->nip,
        'total'   => floatval($request->n6),
        'tanggal' => $request->tanggal,
        'waktu'   => $request->waktu,
    ];

    // 可空字段仅当请求值非null时才加入更新列表,保留数据库原有值
    if (!is_null($request->n1)) {
        $updateData['nilai_kemampuan_dasar_program'] = floatval($request->n1);
    }
    if (!is_null($request->n2)) {
        $updateData['nilai_kecocokan_algoritma'] = floatval($request->n2);
    }
    if (!is_null($request->n3)) {
        $updateData['nilai_penguasaan_program'] = floatval($request->n3);
    }
    if (!is_null($request->n4)) {
        $updateData['nilai_penguasaan_ui'] = floatval($request->n4);
    }
    if (!is_null($request->n5)) {
        $updateData['nilai_validasi_output'] = floatval($request->n5);
    }

    NilaiUjiProgram::where('nim', $request->nim)->update($updateData);

    return redirect('/prodi/daftar_nilai_uji_program')->with('status', 'Nilai berhasil diperbaharui!');
}

补充说明:如果前端表单空提交时传的是空字符串而非null,可以将判断条件调整为if ($request->filled('nX')),Laravel的filled方法会自动过滤空字符串、null等空值,同时保留合法的0值,避免误跳过有效评分。按你当前的验证规则,空参数会自动转换为null,现有判断逻辑已经可以正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:27:21