Я использую функцию codeigniter update_batch
.
Я хочу передать массив в качестве третьего параметра (where where) в update_batch
.
$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');
Я хочу сделать это:
$this->db->update_batch('mytable', $data, array('title','name'));
Так много, когда условия добавлены.
Это возможно?
Вы можете сделать это, создав свой метод пакетного обновления в вашей модели Test_model, например, потому что Codeigniter не поддерживает несколько условий, в которых выполняется родная update_batch, поэтому пример ниже:
public function update_batch_custom($table_name, $data, $indexes) { if (empty($data) || empty($indexes)){ return 'Data or indexes must not be empty'; } $db = $this->load->database('test_db', TRUE); $sql = 'UPDATE ' . $table_name . ' SET ' . "\n"; //columns on which is done actual update $columns = []; foreach ($data[0] as $key => $value) { if (!in_array($key, $indexes)){ $columns[] = $key; } } /* * forming WHEN .. THEN sql parts and WHERE condition */ $parts = []; $where = []; foreach ($data as $row) { foreach ($columns as $column) { $sql_part = ' WHEN ('; foreach ($indexes as $index) { $sql_part .= $index . '= \''.$row[$index] . '\' AND '; $where[$index][] = $row[$index]; } $sql_part = substr($sql_part, 0, -4); $sql_part .= ') THEN \'' . $row[$column] . '\''; $parts[$column][] = $sql_part; } } /* * connecting WHEN .. THEN parts for each column to be updated */ foreach ($columns as $column) { $sql .= $column .'= CASE '; foreach ($parts[$column] as $sql_part) { $sql .= $sql_part; } $sql .= ' ELSE ' . $column . ' END,'; } /* * adding WHERE part */ $sql = substr($sql, 0, -1); $sql .= ' WHERE '; foreach ($indexes as $index) { if ( count($where[$index]) > 0){ $unique_where = array_unique($where[$index]); $sql .= $index . ' IN (\'' . join('\',\'', $unique_where) . '\') AND '; } } $sql = substr($sql, 0, -4); $sql .= ';'; return $db->query($sql); }
Вы всегда можете это сделать:
$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->where(array('title' => 'title', 'name' => 'name')); $this->db->update_batch('mytable', $data);
Не испытано.
UPDATE update_batch()
where
параметр update_batch()
.