/** * Salva (insere) ou atualiza (update) um registro * * Este metodo e um pouco diferente do que somente o save. * Ele checa se existe uma chave primaria auto-incrementavel. * Se existir, usa o save normal, se nao existir, ira buscar os * registros com base nas chaves primarias encontradas e os valores * encontrados nos dados informados para persistencia. * * Se encontrar algum registro com as chaves informadas, ira atualizar, * do contrario insere. * * @author Hugo Ferreira da silva * @link http://www.hufersil.com.br * @param $data * @return unknown_type */ public function saveOrUpdate(array $data) { $this->obj->reset(); $pks = $this->obj->_getPrimaryKeys(); $hasAutoInc = false; foreach ($pks as $pk) { if (!empty($pk['options']['autoincrement'])) { $hasAutoInc = true; break; } $name = $pk['name']; $this->obj->{$name} = array_key_exists($name, $data) ? $data[$name] : null; } if ($hasAutoInc) { return $this->save($data); } $total = $this->obj->count(); $this->obj->_setFrom($data); if ($total == 0) { $this->obj->insert(); } else { $this->obj->save(); } return 0; }