Example #1
0
 /**
  * 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
     }
 }
Example #2
0
 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);
         }
     }
 }
Example #3
0
 /**
  * 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();
 }
Example #4
0
 /**
  * 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();
 }