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 ドキュメントによると、 where キーである 3 番目のパラメーターを追加する必要があります。ドキュメントの例を次に示します。

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

したがって、上記のクエリのタイトル列は、行が比較されるものです。したがって、タイトルが「My Title」の行では最初の配列要素が更新として使用され、「Another Title」の行では 2 番目の要素が使用されます。お分かりできると良いのですが。比較フィールドがない場合、データベース全体が更新されます:-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 に答える