/**
  * Método para recuperar um objeto do banco através do mapeamento
  * objeto relacional. A classe PHPDoc recupera os atributos da classe
  * 
  * @param string $table
  * @param array $column
  * @param array $identificador ex: array(array( 'campo' => 'valor' );
  */
 public function getObject($object)
 {
     $this->object =& $object;
     $doc = new \core\dba\persistencia\PHPDoc(get_class($object));
     /*
      * Define 
      */
     $this->setTable(get_class($object));
     $this->select()->column(array($this->table => $doc->getColumn()));
     foreach ($doc->getPK() as $pk) {
         if (!is_null($this->object->__get($pk))) {
             $this->select()->where($pk, "=", $this->object->__get($pk));
         }
     }
     $this->setAttributes($this->execute());
 }
Exemple #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);
         }
     }
 }