Codeigniter Active Record – na atualização de chave duplicada

Simplesmente adicione a seguinte função ao seu sistema / banco de dados / arquivo rec.php ativo do banco de dados :

/**
* public function on_duplicate

* Compiles an on duplicate key update string and runs the query

*

* @access public

*
@param string - the table to retrieve the results from
*
@param array - an associative array of update value
* @return object

*/

function on_duplicate($table = '', $set = NULL )
{
if ( ! is_null($set))
{
$this
->set($set);
}

if (count($this->ar_set) == 0)
{
if ($this->db_debug)
{
return $this->display_error('db_must_use_set');
}
return FALSE;
}

if ($table == '')
{
if ( ! isset($this->ar_from[0]))
{
if ($this->db_debug)
{
return $this->display_error('db_must_set_table');
}
return FALSE;
}

$table
= $this->ar_from[0];
}


$sql
= $this->_duplicate_insert($this->_protect_identifiers($this->dbprefix.$table), $this->ar_set );

$this
->_reset_write();
return $this->query($sql);
}

Em seguida, chame usando a notação Active Record como em seu modelo:

$this->db->on_duplicate('database_table', $array);

Isso atualizará todos os detalhes em uma matriz para uma linha onde a chave primária já existe. Se não existir, ele irá adicioná-lo para você!