Exemplo n.º 1
0
 public function delete($id)
 {
     $phpDocMainObject = new PHPDoc(get_class($this));
     # recupera as propriedades da classe
     $this->properties = $phpDocMainObject->getProperties();
     $pk = $phpDocMainObject->getPK();
     $delete = $this->oSQL->delete();
     $delete->add($this->table);
     $delete->where($pk, '=', $id);
     $this->oSQL->getLink()->beginTransaction();
     try {
         $this->oSQL->execute();
         $this->oSQL->getLink()->commit();
     } catch (\PDOException $e) {
         //@TODO Tratar exceção
         # se ocorrer exceção
         # 1 - desfazer a transação
         # 2 - capturar o erro
         # 3 - armazenar o erro
         # 4 - apresentar tela de erro (ver os tipos de erros e consequências)
         # se ocorrer exceção na classe principal, o script deverá ser cancelado.
         $this->oSQL->getLink()->rollBack();
         /*
          * Se ocorrer excessão, os dados são passados para a classe de controle
          * de excessão do framework. Essa classe gerencia os dados que são passados
          * na interface do usuário e fornece as opções para solução do problema.
          */
         excecao::debugException($e->getMessage(), $e->getCode(), $e->getTrace());
     }
 }
Exemplo n.º 2
0
 /**
  * Nesse método cada classe é persistida de acordo
  * com as suas características, permite inclusive
  * usar base de dados diferentes
  */
 public function save2()
 {
     /*
      * Substitui a variável $mainObject por $this que recupera os
      * dados da classe filha.
      */
     $phpDocMainObject = new PHPDoc($this->class);
     // recupera as propriedades da classe
     $this->properties = $phpDocMainObject->getProperties();
     // verificar se a chave primaria foi definida
     # recupera os atributos da classe principal
     //foreach ( $this->properties [get_class( $this )] as $vProperties ) {
     foreach ($this->properties[$this->class] as $vProperties) {
         // verificar se a chave primaria foi definida
         if ($phpDocMainObject->getPK() == $vProperties) {
             if (is_null($this->__get($vProperties))) {
                 # PK não definida: insert
                 continue;
             } else {
                 # PK definida: update, clausula where necessária
                 $where[$vProperties] = $this->__get($vProperties);
                 continue;
             }
         }
         $mainData[$vProperties] = $this->__get($vProperties);
     }
     parent::getLink()->beginTransaction();
     if (is_null($this->__get($phpDocMainObject->getPK()))) {
         # se PK = null: insert
         try {
             # insere um novo objeto no banco de dados
             $this->insert()->add($mainData, PREFIX_TABLE . $this->getClass());
             $this->execute();
             //$this->insert ( $mainData, PREFIX_TABLE.$this->getClass() );
             # salva a transação
             //$this->conexao->commit();
             parent::getLink()->commit();
             # Quando um novo objeto é criado deve-se recuperar o id do objeto principal
             # e passa-lo para a FK correspondente
             $this->__set($phpDocMainObject->getPK(), $this->lastInsertId());
         } catch (PDOException $e) {
             # se ocorrer exceção na classe principal, o script deverá ser cancelado.
             //$this->conexao->rollBack();
             /*
              * Se ocorrer excessão, os dados são passados para a classe de controle
              * de excessão do framework. Essa classe gerencia os dados que são passados
              * na interface do usuário e fornece as opções para solução do problema.
              */
             excecao::debugException($e->getMessage(), $e->getCode(), $e->getTrace());
         }
     } else {
         try {
             # se ocorrer exceção na classe principal, o script deverá ser cancelado.
             # se a chave primária for definida, realizar update
             $this->update()->add($mainData, $where, PREFIX_TABLE . $this->getClass());
             $this->execute();
             # salva a transação
             //$this->conexao->commit();
             parent::getLink()->commit();
             //$this->link->commit();
         } catch (PDOException $e) {
             # se ocorrer exceção na classe principal, o script deverá ser cancelado.
             //$this->conexao->rollBack();
             parent::getLink()->rollBack();
             /*
              * Se ocorrer excessão, os dados são passados para a classe de controle
              * de excessão do framework. Essa classe gerencia os dados que são passados
              * na interface do usuário e fornece as opções para solução do problema.
              */
             excecao::debugException($e->getMessage(), $e->getCode(), $e->getTrace());
         }
         //debug(__LINE__, "linhas afetadas: ".$this->getNumberRows() );
     }
 }
Exemplo n.º 3
0
 /**
  * 
  * @param unknown $mainObject
  */
 public function save($mainObject)
 {
     #$phpDocMainObject = new PHPDoc( get_class( $mainObject ) );
     $phpDocMainObject = new PHPDoc($this->class);
     // recupera as propriedades da classe
     $this->properties = $phpDocMainObject->getProperties();
     // verificar se a chave primaria foi definida
     # recupera os atributos da classe principal
     foreach ($this->properties[get_class($mainObject)] as $vProperties) {
         // verificar se a chave primaria foi definida
         if ($phpDocMainObject->getPK() == $vProperties) {
             if (is_null($mainObject->__get($vProperties))) {
                 # PK não definida: insert
                 continue;
             } else {
                 # PK definida: update, clausula where necessária
                 $where[$vProperties] = $mainObject->__get($vProperties);
                 continue;
             }
         }
         $mainData[$vProperties] = $mainObject->__get($vProperties);
     }
     // debug(__LINE__, "tab_".getdebug(__LINE__, $oCliente->getTelefone()->__get('telefone'));_class( $object ) );
     // se pk = null : ação igual a insert
     #$this->conexao->beginTransaction();
     # inicia uma transação
     $this->con->beginTransaction();
     if (is_null($mainObject->__get($phpDocMainObject->getPK()))) {
         # se PK = null: insertthis->getCon()->
         try {
             # insere um novo objeto no banco de dados
             #$this->insert ( $mainData, PREFIX_TABLE.get_class( $mainObject ) );
             $this->insert($mainData, $this->getTable($this->class));
             # salva a transação
             $this->con->commit();
             # Quando um novo objeto é criado deve-se recuperar o id do objeto principal
             # e passa-lo para a FK correspondente
             $mainObject->__set($phpDocMainObject->getPK(), $this->lastInsertId());
         } catch (\PDOException $e) {
             # se ocorrer exceção na classe principal, o script deverá ser cancelado.
             $this->con->rollBack();
             /*
              * Se ocorrer excessão, os dados são passados para a classe de controle
              * de excessão do framework. Essa classe gerencia os dados que são passados
              * na interface do usuário e fornece as opções para solução do problema.
              */
             excecao::debugException($e->getMessage(), $e->getCode(), $e->getTrace());
         }
     } else {
         try {
             # se ocorrer exceção na classe principal, o script deverá ser cancelado.
             # se a chave primária for definida, realizar update
             #$this->update ( $mainData, $where, PREFIX_TABLE.get_class( $mainObject ) );
             $this->update($mainData, $where, $this->getTable($this->class));
             # salva a transação
             $this->con->commit();
         } catch (\PDOException $e) {
             # se ocorrer exceção na classe principal, o script deverá ser cancelado.
             $this->con->rollBack();
             /*
              * Se ocorrer excessão, os dados são passados para a classe de controle
              * de excessão do framework. Essa classe gerencia os dados que são passados
              * na interface do usuário e fornece as opções para solução do problema.
              */
             excecao::debugException($e->getMessage(), $e->getCode(), $e->getTrace());
         }
         //debug(__LINE__, "linhas afetadas: ".$this->getNumberRows() );
     }
     # retira a classe principal do array
     unset($this->properties[$this->class]);
     # verifica se o array de classes não está vazio
     if (!empty($this->properties)) {
         # tratamento dos atributos das classes vinculadas
         # $derivedClass = nome da classe vinculada
         # $vAttribute1 : não tem valor ou uso
         foreach ($this->properties as $derivedClass => $vAttribute1) {
             // recupera as classes vinculadas
             # recupera a documentação da classe vinculada
             $phpDocDerivedObject = new PHPDoc($derivedClass);
             # $properties: recupera as propriedades (atributos) pertencentes as classes vinculadas
             $properties = $phpDocDerivedObject->getProperties();
             index\debug(__FILE__, __LINE__, $vAttribute1);
             # verifica se o atributo pertencente a classe vinculada não está vazio
             #if (! empty ( $mainObject->__get( lcfirst( $derivedClass ) ) )) {
             if (!empty($mainObject->__get($vAttribute1))) {
                 #
                 # $value: objeto da classe vinculada
                 foreach ($mainObject->__get($vAttribute1) as $key => $derivedObject) {
                     foreach ($properties[$derivedClass] as $vAttribute2) {
                         # verificar se a chave primaria foi definida
                         if ($phpDocDerivedObject->getPK() == $vAttribute2) {
                             if (is_null($derivedObject->__get($vAttribute2))) {
                                 # se não existir pk: insert
                                 continue;
                             } else {
                                 # se existir PK: update, clausula where definida
                                 $where2[$vAttribute2] = $derivedObject->__get($vAttribute2);
                                 continue;
                             }
                         }
                         # passo 1: verificar se o atributo é uma chave estrangeira
                         if (in_array($vAttribute2, $phpDocDerivedObject->getFK())) {
                             # passo 2: verificar se a chave estrangeira é null
                             if (is_null($derivedObject->__get($vAttribute2))) {
                                 # passo 3: se a chave estrangeira for null significa que
                                 # que foi criado um objeto da classe principal
                                 # definir o valor da chave estrangeira
                                 $derivedObject->__set($vAttribute2, $mainObject->__get($phpDocMainObject->getPK()));
                             }
                         }
                         $derivedData[$vAttribute2] = $derivedObject->__get($vAttribute2);
                     }
                     # fim do foreach
                     # inicia uma transação
                     $this->con->beginTransaction();
                     if (is_null($derivedObject->__get($phpDocDerivedObject->getPK()))) {
                         try {
                             #
                             $this->insert($derivedData, $this->getTable($derivedClass));
                             # salva a transação
                             $this->con->commit();
                         } catch (\PDOException $e) {
                             # se ocorrer exceção uma mensagem deverá ser mostrada ao usuário.
                             $this->con->rollBack();
                             /*
                              * Se ocorrer excessão, os dados são passados para a classe de controle
                              * de excessão do framework. Essa classe gerencia os dados que são passados
                              * na interface do usuário e fornece as opções para solução do problema.
                              */
                             excecao::debugException($e->getMessage(), $e->getCode(), $e->getTrace());
                         }
                     } else {
                         try {
                             #
                             #$this->update ( $derivedData, $where2, PREFIX_TABLE. $derivedClass );
                             $this->update($derivedData, $where2, $this->getTable($derivedClass));
                             #debug(__LINE__, "linhas afetadas: ".$this->getNumberRows() );
                             # salva a transação
                             $this->con->commit();
                         } catch (\PDOException $e) {
                             # se ocorrer exceção uma mensagem deverá ser mostrada ao usuário.
                             $this->con->rollBack();
                             /*
                              * Se ocorrer excessão, os dados são passados para a classe de controle
                              * de excessão do framework. Essa classe gerencia os dados que são passados
                              * na interface do usuário e fornece as opções para solução do problema.
                              */
                             excecao::debugException($e->getMessage(), $e->getCode(), $e->getTrace());
                         }
                     }
                     # fim do else
                     unset($where2);
                     unset($derivedData);
                 }
                 # fim do foreach dos objetos derivados
             }
             // fim do if
         }
         // fim do foreach
     }
     // fim do: !empty( $this->properties )
 }