0

这是我到目前为止所拥有的

控制器

       $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.

请帮我解决这个问题,我尝试了谷歌搜索,但没有任何结果。

4

1 回答 1

1

好的,这就是问题所在。根据update_batch 的 CI Docs,您需要添加第三个参数,即 where key 。这是文档中的一个示例。

$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')

希望这可以帮助。

于 2012-08-31T02:56:56.193 回答