这是我到目前为止所拥有的
控制器
$i = 0;
foreach ($this->input->post('skill') as $cat) {
$data[$i++]['skill'] = $cat;
}
$this->db->update_batch('skills', $data);
}
模型
function update_record($data)
{
$this->db->update('skills', $data);
}
查看
<?php foreach ($skills as $skill):?>
<input type="text" name="skill[]" value="<?php echo $skill->skill;?>">
<?php endforeach?>
我收到了数据库错误
You must specify an index to match on for batch updates.
请帮我解决这个问题我试过谷歌搜索,没有任何事情发生。
答案 0 :(得分:1)
好的,这是问题所在。 根据{{3}},您需要添加第三个参数,即where键。以下是文档中的示例。
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name 2' ,
'date' => 'My date 2'
),
array(
'title' => 'Another title' ,
'name' => 'Another Name 2' ,
'date' => 'Another date 2'
)
);
$this->db->update_batch('mytable', $data, 'title');
因此,在查询的上方,标题列是与行进行比较的内容。因此,对于标题为“我的标题”的行,第一个数组元素用作更新,而对于那些具有“另一个标题”的第二个元素。我希望你明白。如果我们没有比较字段,那么整个数据库将被更新:-P
以下是从上述操作中产生的最终查询。
UPDATE `mytable` SET `name` = CASE
WHEN `title` = 'My title' THEN 'My Name 2'
WHEN `title` = 'Another title' THEN 'Another Name 2'
ELSE `name` END,
`date` = CASE
WHEN `title` = 'My title' THEN 'My date 2'
WHEN `title` = 'Another title' THEN 'Another date 2'
ELSE `date` END
WHERE `title` IN ('My title','Another title')
希望这有帮助。