예제 #1
0
 /**
  * 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();
 }