I want to do an insert of row in a table, like this:
$this->db->update_batch($this->table_name, $update, \'image_id\');
if ($this->db->affected_r
First Select all image_id from the table.
$data = $this->db->select(`image_id`)->get($this->table_name)->result_array();
List image_id into an array.
$image_ids=array();
foreach($data as $key => $value):
$image_ids[$key]=$value[`image_id`];
endforeach;
$update = array(
array('image_id' => 1, 'name' => 'Party Gustav'),
array('image_id' => 2, 'name' => 'Peter'),
array('image_id' => 3, 'name' => 'Lisa')
)
Check if the image_ids exist:
$update_query= $this->db->where_in(`image_ids`,$image_ids)
->get($this->table_name)->result();
if($update_query->num_rows() > 0):
$this->db->update_batch($update,$this->table_name);//update if ids exist
else
$this->db->insert_batch($update,$this->table_name);//insert if does not exist
endif;
It's been a while since I've used codeigniter, but could you check to see if the row exist first, and then either update or insert?
I think what you're looking for is INSERT IGNORE INTO
. Unfortunately, Codeigniter doesn't have an equivalent Active Record function. A discussion on the Codeigniter forums and this similar SO question suggest a method like this:
foreach ($update as $update_item) {
$insert_query = $this->db->insert_string($this->table_name, $update_data['name']);
$insert_query = str_replace('INSERT INTO','INSERT IGNORE INTO',$insert_query);
$this->db->query($insert_query);
}
Also note that the image_id
must be UNIQUE.