/** * Salva ou atualiza um registro através de uma instância de CoreExt_Entity. * * @param CoreExt_Entity $instance * @return bool * @throws CoreExt_DataMapper_Exception|Exception */ public function save(CoreExt_Entity $instance) { if (!$instance->isValid()) { throw new Exception('A instânca de "' . get_class($instance) . '" contém erros de validação.'); } // Coumpound key, todos os valores precisam estar setados, seja para // INSERT ou UPDATE. A instância precisa ser marcada explicitamente // como "old" para que UPDATE seja chamado. if (1 < count($this->_primaryKey)) { foreach ($this->_primaryKey as $pk) { $value = $instance->get($pk); if (!isset($value)) { require_once 'CoreExt/DataMapper/Exception.php'; throw new CoreExt_DataMapper_Exception('Erro de compound key. Uma das primary keys tem o valor NULL: "' . $pk . '"'); } } } elseif (1 == count($this->_primaryKey)) { if (isset($instance->id)) { $instance->markOld(); } } // Reseta o locale para o default (en_US) $this->getLocale()->resetLocale(); if ($instance->isNew()) { return $this->_getDbAdapter()->Consulta($this->_getSaveStatment($instance)); } else { return $this->_getDbAdapter()->Consulta($this->_getUpdateStatment($instance)); } // Retorna o locale para o usado no restante da aplicação $this->getLocale()->setLocale(); }