Пример #1
0
 /**
  * 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;
 }