/** * action ADD * adiciona um novo registro no banco de dados */ public function add() { $oCon = new \core\dba\pdo\Conexao(DRIVER, HOST, DBNAME, USERNAME, PASSWD); $oPop = new \app\models\Pop(); $doc = new \core\dba\persistencia\PHPDoc(get_class($oPop)); foreach ($doc->getColumn() as $column) { if (isset($_POST[$column])) { $oPop->__set($column, $_POST[$column]); debug(__FILE__, __LINE__, $column); } } $pPop = new \app\models\PopPersist($oCon, $oPop); if (isset($_POST["frm"])) { $pPop->save("insert"); if (!is_null($doc->getAutoincrement())) { $oPop->__set($doc->getAutoincrement(), $pPop->lastInsertId()); header("location: " . Url::setURL("pop", "show", array($oPop->__get($doc->getAutoincrement()), "insert: pk do tipo auto_increment"))); } else { header("location: " . Url::setURL("pop", "show", array($oPop->__get("idPop"), "insert: pk gerada pelo usuario ou algoritmo"))); } } elseif (isset($_POST["edt"])) { # o update não suporta autalização de chave primária $pPop->save("update"); header("location: " . Url::setURL("pop", "show", array($oPop->__get("idPop"), "update"))); } else { # tratamento caso os campos submit não contenham os nomes padrões frm ou edt } }
public function save($action) { $doc = new \core\dba\persistencia\PHPDoc(get_class($this->object)); if ($action == "insert") { foreach ($doc->getColumn() as $atributes) { if (!is_null($this->object->__get($atributes))) { $columnValue[$atributes] = $this->object->__get($atributes); } } $this->insert()->add($columnValue, "tab_Pop"); $this->execute(); } elseif ($action == "update") { foreach ($doc->getColumn() as $atributes) { if (!is_null($this->object->__get($atributes))) { if (!in_array($atributes, $doc->getPK())) { $columnValue[$atributes] = $this->object->__get($atributes); } } } $this->update()->add($columnValue, array("idPop" => $this->object->__get("idPop")), "tab_Pop"); $this->execute(); } /* Tratamento automatizado da função de persistência de dados * (if) - tratamento para tabelas com uma chave primária * (else) - tratamento para tabelas com mais de uma chave primaria */ if (count($doc->getPK()) == 1) { # regra valida somente quando houver uma única chave primária /* (if) - tratamento para PK do tipo auto_increment e não nula ( define uma ação do tipo update ) * (else) - tratamento para PK do tipo auto_increment nula ( define ação do tipo insert ) */ if (!is_null($doc->getAutoincrement())) { # a chave primária é do tipo auto_increment if (!is_null($this->object->__get($doc->getPK()))) { # pk não nula, realizar update } elseif (is_null($this->object->__get($doc->getPK()))) { #pk nula, realizar insert } } else { # chave primária gerada pelo usuário ou calculada pelo sistema # -> pode ser usada por entidades fracas, cuja chave primária é composta # passo 1: verificar a validade da chave (regra de negócio) # passo 2: consultar a base de dados para verificar a existência da chave # passo 3: se a chave existir na base de dados } } elseif (count($doc->getPK()) > 1) { # regra válida quando houver mais de uma chave primária } foreach ($doc->getColumn() as $atributes) { if (!is_null($this->object->__get($atributes))) { $columnValue[$atributes] = $this->object->__get($atributes); } } }
/** * Método para alterar o estado de um objeto e persistir no banco de dados. * * obs: esse método deve recuperar o estado anterior do objeto, comparar * com o estado atual e realizar o insert dos novos dados, update dos dados * alterados e delete dos dados excluídos. Deve ser elaborado um padrão para * que as operações sejam transparentes e reaproveitadas para cada classe. * @param unknown $object */ public function save($object) { $classeObjeto = get_class($object); $doc = new \core\dba\persistencia\PHPDoc($classeObjeto); $this->setTable($classeObjeto); return $doc->getProperties(); }
/** * Recupera a instância de 1 objeto no banco de dados. Permite apenas * 1 resultado de busca. */ public function getObject() { # obter a documentação da classe $doc = new \core\dba\persistencia\PHPDoc(get_class($this->object)); # definir a tabela e os campos da consulta SQL $this->select()->column(array("tab_Pop" => $doc->getColumn())); # definir a restrição da consulta com base na chave primária (definir código para chaves múltiplas - relacionamento MxN) $this->select()->where("idPop", "=", $this->object->__get("idPop")); $this->setAttributes($this->execute()); //return $this->getNumberRows(); }