Ejemplo n.º 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;
 }
Ejemplo n.º 2
0
 /**
  * Insere o registro enviado no banco de dados
  *
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br/
  * @param array $values valores do formulario
  * @return array resultado da validacao
  */
 private function insert($values)
 {
     $def = $this->obj->metadata()->getFields();
     foreach ($def as $name => $prop) {
         if (!empty($prop['options']['foreign']) && empty($values[$name])) {
             $this->obj->setFieldValue($name, null);
         } else {
             if ($this->strip_slashes) {
                 $this->obj->setFieldValue($name, stripslashes(@$values[$name]));
             } else {
                 $this->obj->setFieldValue($name, @$values[$name]);
             }
         }
     }
     // limpamos as pk's que sao auto-incrementaveis
     $obj =& $this->obj;
     $pks = $obj->metadata()->getPrimaryKeys();
     foreach ($pks as $name => $item) {
         if (!empty($item['options']['autoincrement'])) {
             $obj->{$item}['name'] = null;
         }
     }
     // atualiza as referencias MTM
     $def = $obj->metadata()->getRelations(FALSE);
     foreach ($def as $name => $prop) {
         if ($prop['type'] == Lumine_Metadata::MANY_TO_MANY) {
             $obj->removeAll($name);
             if (!empty($values[$name])) {
                 foreach ($values[$name] as $id) {
                     $obj->{$name}[] = $id;
                 }
             }
         }
     }
     // $this->obj->populateFrom($values);
     $res = $this->obj->validate();
     if ($res === true) {
         $this->obj->insert();
         return true;
     }
     return $res;
 }