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

CodeIgniter 4 整数数据无法插入数据库问题求助

问题:表单number字段存入数据库始终为0

视图中构建提交表单,no_lemari和no_rak为number类型,控制器可正常获取所有表单数据,数据通过必填、唯一性验证后调用模型保存,但这两个字段始终存入0(输入值非0)。尝试过intval转换类型、先赋值给变量再保存,均无效。

视图表单代码

<form action="/arsip/save" method="post">
    <?= csrf_field(); ?>
    <div class="mb-3">
        <label for="nama_pemegang_hak" class="form-label">Nama Pemegang Hak</label>
        <input type="text" name="nama_pemegang_hak" class="form-control <?= $validation->hasError('nama_pemegang_hak') ? 'is-invalid' : ''; ?>" id=" nama_pemegang_hak" value="<?= old('nama_pemegang_hak'); ?>">
    </div>
    <div class="mb-3">
        <label class="form-label" for="nama_hak">Nama Hak</label>
        <select class="form-select" id="nama_hak" name="nama_hak">
            <option value="Hak Milik">Hak Milik</option>
            <option value="Hak Guna Bangunan">Hak Guna Bangunan</option>
            <option value="Warkah">Warkah</option>
        </select>
    </div>
    <div class="mb-3">
        <label for="nomor_hak" class="form-label">Nomor Hak</label>
        <input type="text" name="nomor_hak" class="form-control <?= $validation->hasError('nomor_hak') ? 'is-invalid' : ''; ?>" id="nomor_hak" value="<?= old('nomor_hak'); ?>">
    </div>
    <div class="mb-3">
        <label for="kelurahan" class="form-label">Kelurahan</label>
        <input type="text" name="kelurahan" class="form-control <?= $validation->hasError('kelurahan') ? 'is-invalid' : ''; ?>" id="kelurahan" value="<?= old('kelurahan'); ?>">
    </div>
    <div class="mb-3">
        <label for="kecamatan" class="form-label">Kecamatan</label>
        <input type="text" name="kecamatan" class="form-control <?= $validation->hasError('kecamatan') ? 'is-invalid' : ''; ?>" id="kecamatan" value="<?= old('kecamatan'); ?>">
    </div>
    <div class="mb-3">
        <label for="no_lemari" class="form-label">Nomor Lemari</label>
        <input type="number" name="no_lemari" min="1" class="form-control <?= $validation->hasError('no_lemari') ? 'is-invalid' : ''; ?>" id="no_lemari" value="<?= old('no_lemari'); ?>">
    </div>
    <div class="mb-3">
        <label for="no_rak" class="form-label">Nomor Rak</label>
        <input type="number" name="no_rak" min="1" class="form-control <?= $validation->hasError('no_rak') ? 'is-invalid' : ''; ?>" id="no_rak" value="<?= old('no_rak'); ?>">
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

控制器保存代码

$this->bukuModel->save([
    'nama_pemegang_hak' => $this->request->getVar('nama_pemegang_hak'),
    'nama_hak' => $this->request->getVar('nama_hak'),
    'nomor_hak' => $this->request->getVar('nomor_hak'),
    'kelurahan' => $this->request->getVar('kelurahan'),
    'kecamatan' => $this->request->getVar('kecamatan'),
    'no_lemari' => intval($this->request->getVar('no_lemari')),
    'no_rak' => intval($this->request->getVar('no_rak'))
]);

session()->setFlashdata('pesan', 'Data berhasil ditambahkan.');

return redirect()->to('/arsip/home');

数据库表结构

字段包含:id(自增主键)、nama_pemegang_hak、nama_hak、nomor_hak、kelurahan、kecamatan、no_lemari、no_rak,其中no_lemari和no_rak为整数类型,默认值为0。


问题原因分析

最可能的原因是CodeIgniter模型未将no_lemari和no_rak加入允许批量赋值的白名单:
CodeIgniter的Model->save()方法会严格过滤字段,只有在模型的$allowedFields数组中声明的字段才会被写入数据库。如果这两个字段未被加入白名单,即使控制器传递了值,也会被模型过滤掉,数据库会使用字段默认值0存入。

其他次要排查点:

  1. 确认控制器获取的值是否正确:可以在保存前添加调试代码验证是否拿到了输入的非0值。
  2. 数据库字段是否允许非空:如果字段设置了允许空,但默认值为0,当字段未被赋值时也会存入0,但结合你能获取到表单值的情况,这个概率较低。

解决方法

  1. 修改模型的$allowedFields配置:
    打开bukuModel.php,找到$allowedFields数组,将no_lemari和no_rak添加进去:
    protected $allowedFields = [
        'nama_pemegang_hak',
        'nama_hak',
        'nomor_hak',
        'kelurahan',
        'kecamatan',
        'no_lemari', // 新增
        'no_rak'     // 新增
    ];
    
  2. 验证数据获取是否正常:
    若修改模型后问题仍存在,在控制器保存代码前添加调试代码,确认请求值是否正确:
    var_dump($this->request->getVar('no_lemari'), $this->request->getVar('no_rak'));
    exit;
    
    如果输出为0或null,则需要检查表单提交是否存在问题(比如字段名拼写错误、前端验证拦截等);如果输出正确的数值,再排查模型的其他逻辑(如是否有beforeSave钩子篡改了值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:49:50