/**
  * A função não funciona, pois a passagem do objeto por referência
  * altera o estado dos objetos ja armazenados na variável de retorno.
  * @param unknown $object
  * @param unknown $where
  * @return multitype:NULL
  */
 public function getAllObject($object, $where)
 {
     //$this->object = $object;
     $classeObjeto = get_class($object);
     $doc = new \core\dba\persistencia\PHPDoc($classeObjeto);
     $this->setTable($classeObjeto);
     $this->select()->column(array($this->table => $doc->getColumn()));
     if (!empty($where)) {
         foreach ($where as $value) {
             $this->select()->where($value[0], $value[1], $value[2]);
         }
     }
     foreach ($this->execute() as $vResult) {
         # cria um objeto para que seja armazenado no array
         $this->object = new $classeObjeto();
         foreach ($vResult as $atributo => $valor) {
             # carrega os atributos do objeto
             $this->object->__set($atributo, $valor);
         }
         # armazena o objeto no array
         $output[] = $this->object;
         $this->object = null;
     }
     # retorna um array de objetos
     return $output;
 }
Exemple #2
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
     }
 }
Exemple #3
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);
         }
     }
 }
Exemple #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();
 }