/** * 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; }
/** * Salva um no e toda sua arvore * * @author Hugo Ferreira da Silva * @return void */ public function save() { $this->dispatchEvent(new Lumine_Tree_Event(Lumine_Tree_Event::PRE_NODE_SAVE, $this)); $this->obj->save(); $id = $this->obj->{$this->fieldId}; $this->getChildNodes()->reset(); while ($child = $this->getChildNodes()->nextSibling()) { $child->{$this->fieldParentId} = $id; $child->save(); } $this->dispatchEvent(new Lumine_Tree_Event(Lumine_Tree_Event::POS_NODE_SAVE, $this)); }