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

SQLSTATE[23000]约束违反:id_ibu字段不可为空问题求助

解决SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id_ibu' cannot be null问题

问题描述

执行数据插入时触发数据库约束错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id_ibu' cannot be null

对应的SQL插入语句:

insert into `ibuhamils` (`id_ibu`, `berat_badan`, `tinggi_badan`, `lila`, `t_darah`, `keluhan`, `tgl_periksa`, `updated_at`, `created_at`) values (?, 54, 159, 20, 120/80, Tidak Ada, 2023-08-25, 2023-08-25 11:57:40, 2023-08-25 11:57:40)

问题根源

前端表单的id_ibu下拉框默认选项值为空字符串,部分浏览器对HTML原生required属性的校验不严格,允许提交空值;后端未做数据校验,直接将空值传入数据库,触发非空约束。

修复方案

1. 强化前端表单校验

修改下拉框默认选项,确保用户必须选择有效选项才能提交:

<select class="form-control" name="id_ibu" style="width: 100%;" required>
    <!-- 移除selected属性,强制用户主动选择 -->
    <option value="">-- Nama Ibu --</option>
    @foreach($users as $datas)
        <option value="{{ $datas->id_ibu}}">{{ $datas->nama_ibu }}</option>
    @endforeach
</select>

如果浏览器仍允许提交空值,可添加JS辅助校验:

document.querySelector('form').addEventListener('submit', function(e) {
    const select = document.querySelector('select[name="id_ibu"]');
    if (select.value === '') {
        e.preventDefault();
        alert('Silakan pilih nama ibu terlebih dahulu');
    }
});

2. 后端添加数据验证

在控制器store方法中添加Laravel验证规则,拦截无效数据:

public function store(Request $request){
    // 数据校验规则
    $validated = $request->validate([
        'id_ibu' => 'required|exists:ibu_table,id_ibu', // 替换ibu_table为实际关联表名
        'berat_badan' => 'required|numeric',
        'tinggi_badan' => 'required|numeric',
        'lila' => 'required|numeric',
        't_darah' => 'required|string',
        'keluhan' => 'nullable|string',
        'tgl_periksa' => 'required|date',
    ]);

    // 使用校验后的数据创建记录
    Ibuhamil::create($validated);

    Alert::success('Data Berhasil Ditambah');
 
    return redirect()->route('ibuhamil')->with([
        'success' => 'Data Berhasil Di Tambah'
    ]);
}

3. 确认模型可填充字段

检查Ibuhamil模型的$fillable数组,确保包含id_ibu:

class Ibuhamil extends Model
{
    protected $fillable = [
        'id_ibu',
        'berat_badan',
        'tinggi_badan',
        'lila',
        't_darah',
        'keluhan',
        'tgl_periksa',
    ];
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:01:13