I am using codeigniter update_batch
function.
I want to pass an array as the third parameter (where clause) to 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'
)
);
Instead of this:
$this->db->update_batch('mytable', $data, 'title');
I want to do this:
$this->db->update_batch('mytable', $data, array('title','name'));
So multiple where conditions added.
Is this possible?
You could do this by creating your method for batch update in your model Test_model for example because Codeigniter does not supports multiple where condition in native update_batch, so example below:
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);
}
You can use below code to update your data:
$this->db->update("TableName",[dataarray],[where condition array]);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With