我试图使用update()
更新数据库,但其中没有id。相反,我有一个名为kwt的主键。
每次我尝试执行update()
时,查询总是引用table.id
而不是table.kwt
UPDATE `zakat` SET `nama` = :nama:, `alamat` = :alamat:, `telp` = :telp:, `jmlhjiwa` = :jmlhjiwa:, `berasbeli` = :berasbeli:, `ttlbeli` = :ttlbeli:, `berasbawa` = :berasbawa:, `ttlberas` = :ttlberas:, `maal` = :maal:, `berasinfaq` = :berasinfaq:, `infaq` = :infaq:, `fidyah` = :fidyah:, `penerima` = :penerima: WHERE `zakat`.`id` IN :zakat.kwt:
我需要使WHERE 'zakat'.'id'
变成WHERE 'zakat'.'kwt'
这是我的控制器:
public function update($kwt)
{
$beli = $this->request->getvar('berasbeli');
$this->zakatModel->update(
[
'kwt' => $kwt,
'nama' => $this->request->getVar('nama'),
'alamat' => $this->request->getVar('alamat'),
'telp' => $this->request->getvar('telp'),
'jmlhjiwa' => $this->request->getVar('jmlhjiwa'),
'berasbeli' => $this->request->getVar('berasbeli'),
'ttlbeli' => (int)$beli * 38000,
'berasbawa' => $this->request->getvar('berasbawa'),
'ttlberas' => $this->request->getvar('berasbawa') + $this->request->getVar('berasbeli'),
'maal' => $this->request->getVar('maal'),
'berasinfaq' => $this->request->getVar('berasinfaq'),
'infaq' => $this->request->getvar('infaq'),
'fidyah' => $this->request->getVar('fidyah'),
'penerima' => $this->request->getVar('penerima')
]
);
session()->setFlashdata('pesan', 'Upload Berhasil');
return redirect()->to('/');
}
我的观点:
> <?= $this->extend('layout/template'); ?>
> <?= $this->section('content'); ?>
> <div class="container">
> <div class="row">
> <div class="col-8">
> <form action="/Pages/update/<?= $muzaki['kwt']; ?>" method="post">
> <?= csrf_field(); ?>
> <input type="hidden" name="kwt" value"<?= $muzaki['nama']; ?>">
> <div class="row mb-3">
> <label for="nama" class="col-sm-2 col-form-label">Nama</label>
> <div class="col-sm-10">
> <input type="text" class="form-control" id="nama" name="nama" autofocus value="<?= $muzaki['nama']; ?>">
> </div>
> </div>
> <div class="row mb-3">
> <label for="alamat" class="col-sm-2 col-form-label">Alamat</label>
> <div class="col-sm-10">
> <input type="text" class="form-control" id="alamat" name="alamat" value="<?= $muzaki['alamat']; ?>">
> </div>
> </div>
> <div class="row mb-3">
> <label for="telp" class="col-sm-2 col-form-label">No.Telp</label>
> <div class="col-sm-10">
> <input type="text" class="form-control" id="telp" name="telp" value="<?= $muzaki['telp']; ?>">
> </div>
> </div>
> <br>
> <h3>Zakat Fitrah :</h3>
> <div class=" row mb-3">
> <label for="jmlhjiwa" class="col-sm-2 col-form-label">Anggota Keluarga</label>
> <div class="col-sm-10">
> <input type="number" class="form-control" id="jmlhjiwa" name="jmlhjiwa" value="<?= $muzaki['jmlhjiwa']; ?>">
> </div>
> </div>
> <div class="row mb-3">
> <label for="berasbeli" class="col-sm-2 col-form-label">Beras Dalam</label>
> <div class="col-sm-10">
> <input type="number" class="form-control" id="berasbeli" name="berasbeli" value="<?= $muzaki['berasbeli']; ?>">
> </div>
> </div>
> <div class="row mb-3">
> <label for="berasbawa" class="col-sm-2 col-form-label">Beras Luar</label>
> <div class="col-sm-10">
> <input type="number" class="form-control" id="berasbawa" name="berasbawa" value="<?= $muzaki['berasbawa']; ?>">
> </div>
> </div>
> <br>
> <h3>Zakat Maal :</h3>
> <div class="row mb-3">
> <label for="maal" class="col-sm-2 col-form-label">Zakat Maal</label>
> <div class="col-sm-10">
> <input type="number" class="form-control" id="maal" name="maal" value="<?= $muzaki['maal']; ?>">
> </div>
> </div>
> <br>
> <h3>Infaq :</h3>
> <div class="row mb-3">
> <label for="berasinfaq" class="col-sm-2 col-form-label">Beras</label>
> <div class="col-sm-10">
> <input type="number" class="form-control" id="berasinfaq" name="berasinfaq" value="<?= $muzaki['berasinfaq'];
> ?>">
> </div>
> </div>
> <div class="row mb-3">
> <label for="infaq" class="col-sm-2 col-form-label">infaq</label>
> <div class="col-sm-10">
> <input type="number" class="form-control" id="infaq" name="infaq" value="<?= $muzaki['infaq']; ?>">
> </div>
> </div>
> <div class="row mb-3">
> <label for="fidyah" class="col-sm-2 col-form-label">Fidyah</label>
> <div class="col-sm-10">
> <input type="number" class="form-control" id="fidyah" name="fidyah" value="<?= $muzaki['fidyah']; ?>">
> </div>
> </div>
> <br><br>
> <div class="row mb-3">
> <label for="penerima" class="col-sm-2 col-form-label">Penerima</label>
> <div class="col-sm-10">
> <input type="text" class="form-control" id="penerima" name="penerima" value="<?= $muzaki['penerima']; ?>">
> </div>
> </div><br><br>
> <button type="submit" class="btn btn-primary">Submit</button>
> </form>
> </div>
> </div>
> </div>
> <?= $this->endsection(); ?>
对于我的模型,我还没有写任何东西,因为我的教程模型中没有写任何内容。当我使用save()
而不是update()
时,它将创建具有相同主键的新数据。
它需要表的id来更新数据;您的id已被遗忘
看看我的示例
function dommy($id, $data){
$myModel = new MyModel();
$myModel->update( $id, $data);
}
更新记录时,需要确定要更新的记录。它应该是由像id
这样的主键定义的,或者是由具有不同列的WHERE
sql子句定义的。
它应该像下面的一样:
$this->zakatModel->update($id, [
...
]);
// OR
$data = [
...
];
$data['id'] = 4 // for example. You can send with form or you can get from URL.
$this->zekatModel->save($data);
在save
方法中,不需要将id
值作为单独的参数。因为在方法内部,它会检查自己:
protected function save($data) {
...
$this->update($this->getIdValue($data), $data);
}
快乐编码。。