我正在使用Codeigniter 2,我想更新多行。
模型
这是我的模型,但问题是,第一行只是更新。
foreach ($this->input->post('qty') as $key => $value) {
$data = array(
'item_quantity' => $value,
'discount' => $this->input->post('discount')[$key],
'senior' => $this->input->post('qty')[$key]
);
$this->db->where('item_id', $this->input->post('item_id')[$key]);
$this->db->where('request_id', $this->input->post('request_id'));
return $this->db->update('medical_request_items', $data);
}
另一方面,我设法做到了这一点。
foreach ($query->result() as $row)
{
echo '<tr>';
echo '<input type="hidden" name="item_id[]" value="' . $row->item_id . '">';
echo '<td>' . $x++ . '</td>';
echo '<td>' . $row->item_id . '</td>';
echo '<td>' . $row->item_name . '</td>';
echo '<td><input type="text" size="1" name="qty[]" value="' . $row->item_quantity . '"></td>';
echo '<td>' . $row->item_retailprice . '</td>';
echo '<td><input type="text" size="2" name="discount[]" value="' . $row->discount . '"></td>';
echo '<td><input type="text" size="2" name="senior[]" value="' . $row->senior . '"></td>';
echo '<td>' . ($row->item_quantity * $row->item_retailprice) . '</td>';
echo '<td>' . (($row->item_quantity * $row->item_retailprice)-($row->item_quantity * $row->discount)-($row->item_quantity * $row->senior)) . '</td>';
echo '</tr>';
}
我试图回复/打印,它工作正常。但它不适用于多次更新。
修改
所以我设法查看update_batch
,但我有一个错误。
$data = array(
foreach ($this->input->post('qty') as $key => $value) {
array(
'request_id' => $this->input->post('request_id'),
'item_id' => $this->input->post('item_id')[$key],
'item_quantity' => $value,
'discount' => $this->input->post('discount')[$key],
'senior' => $this->input->post('senior')[$key]
)
}
);
$this->db->update_batch('medical_request_items', $data, 'item_id, request_id');
答案 0 :(得分:0)
您正在发布多个阵列,但在您的模型中,您只是循环遍历一个,因此您的where子句将始终相同。
答案 1 :(得分:0)
你绝对可以一次预告并更新一条记录。但我认为也应该能够使用更新批处理一次完成所有这些操作。
$this->db->update_batch('yourTableName', $updateData, 'field_to_use_for_key');
ci 2的信息 http://www.codeigniter.com/userguide2/database/active_record.html
====
好吧让我们深入研究代码
// define an array
$requests = array() ;
foreach ($this->input->post('qty') as $key => $value) {
// notice the brackets, very important $requests[]
// this will add to the same array in each loop
$requests[] = array(
'request_id' => $this->input->post('request_id'),
'item_id' => $this->input->post('item_id')[$key],
'item_quantity' => $value,
'discount' => $this->input->post('discount')[$key],
'senior' => $this->input->post('senior')[$key]
) ;
}
// for testing only -- echo out your array so you can confirm its all good
echo 'here is requests array: <br><pre>' ;
print_r($requests) ;
echo '</pre>' ;
// use one field to act as the key
$this->db->update_batch('medical_request_items', $requests, 'request_id');
这样就可以使用一把钥匙了。如果你需要更多的密钥或更新的条件 - 那么只需在foreach循环中更新。此外,您当然在更新前验证任何用户数据。