SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
Mapeamento objeto-relacional em PHP
     com PEAR::Data_Object

    Almir Neto – almirneto@gmail.com

         CoNaPHP – CONISLI 2008


       http://www.conaphp.com.br/
   São Paulo, 18 e 19 de Outubro de 2008
Mapeamento objeto-relacional em PHP
     com PEAR::Data_Object

Grupo de Desenvolvedores PHP de Goiás

    Lista de Discussão
●



    Troca de Conhecimentos
●



    Encontros
●



    Palestras
●



    Eventos
●



    Networking
●



    http://www.gophp.com.br
●
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




    O que é Mapeamento Objeto
            Relacional?
• “Mapeamento objeto-relacional (ou ORM) é uma técnica de
  desenvolvimento utilizada para reduzir a impedância da
  programação orientada a objetos utilizando bancos de dados
  relacionais. As tabelas do banco de dados são representadas
  através de classes e os registros de cada tabela são representados
  como instâncias das classes correspondentes.
  Com esta técnica, o programador não precisa de se preocupar com
  os comandos em linguagem SQL; irá usar uma interface de
  programação simples que faz todo o trabalho de persistência.”

                                                   Wikipédia

                                   Almir Neto
                             almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




                 O que é PEAR?
• O PEAR (PHP Extension and Aplication Repository) é um
  framework e um sistema de distribuição para a codificação de
  componentes em PHP.
• Mais Informações: http://pear.php.net




                                  Almir Neto
                            almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




         PEAR::DB_DataObject
• Dispensa o uso de SQL para operações CRUD(Create, Read,
  Update, Delete)
• Portabilidade do Banco de Dados
• Facilidade para manipular dados
• Velocidade do desenvolvimento
• Base de dados sempre documentada
• Gera classes PHP com o mapeamento das tabelas
• Métodos setters e getters automáticos


                                 Almir Neto
                           almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




        Arquivo de Configuração
• Arquivo .ini
  [DB_DataObject]
  database                  =   mysql://user:pw@host/BD
  schema_location           =   /dataobjects/schema/
  class_location            =   /dataobjects/
  require_prefix            =   /dataobjects/
  extends_location          =   DB/DataObject.php
  extends                   =   DB_DataObject

• Arrays PHP


                                      Almir Neto
                                almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




          Gerando as Classes PHP
    $> createTables.php /diretorio/DataObject.ini




• Arquivos criados: formato.php, livro.php, revisao.php, cliente.php, BD.ini


                                      Almir Neto
                                almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




                      Classes Geradas
<?php
/**
* Table Definition for formato
*/
require_once 'DB/DataObject.php';
class Formato extends DB_DataObject
{
     ###START_AUTOCODE
     /* the code below is auto generated do not remove the above tag */

     var $__table = 'formato'; // table name
     var $formato_id; // int(4) not_null primary_key unique_key
     unsigned auto_increment
     var $titulo; // string(40)

     /* ZE2 compatibility trick*/
     function __clone() { return $this;}

     /* Static get */
     function staticGet($k,$v=NULL)
          return DB_DataObject::staticGet('Formato',$k,$v);

     /* the code above is auto generated do not remove the tag below */
     ###END_AUTOCODE
}
                                            Almir Neto
?>
                                      almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




Arquivo de configuração gerado
[livro]
livro_id = 129
titulo = 130
descricao = 66
isbn = 130

[livro__keys]
livro_id = N

[cliente]
cliente_id = 129
nome = 130
rua = 2
cep = 2
cidade = 2

[cliente__keys]
cliente_id = N

                                     Almir Neto
                               almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




Buscando registros pela chave
          primária
<?php
   require_once('DB/DataObject.php');
   require('config.php');

     $livro = DB_DataObject::factory('livro');
     $livro->get(42);

     echo 'Este é o livro: '.$livro->titulo;
?>


                               Almir Neto
                         almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




        Buscando vários registros
<?php
   $livro = DB_DataObject::factory('livro');
   $livro->formato_id = 23;
   $num = $livro->find();
   $i    = 1;

     while ($livro->fetch()) {
        echo quot;Livro: $i de $num:{$livro->titulo}<br>quot;;
        $i++;
     }
?>

                                 Almir Neto
                           almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




           Adicionando condições
<?php
   $livro = DB_DataObject::factory('livro');
   $livro->whereAdd(quot;livro.titulo LIKE 'GOPHP%'quot;);
   $num   = $livro->find();
   $i     = 1;

     while ($livro->fetch()) {
        echo quot;Livro: $i de $num: {$livro->titulo}<br>quot;;
        $i++;
     }
?>

                                  Almir Neto
                            almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




          Inserindo um registro
<?php

     $livro = DB_DataObject::factory('livro');
     $livro->titulo     = 'Software Livre';
     $livro->formato_id = 23;
     $livro_id          = $livro->insert();

?>



                               Almir Neto
                         almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




        Atualizando um registro
<?php

     $livro = DB_DataObject::factory('livro');
     $livro->get(42);

     $livro->titulo = 'Software Livre';
     $livro->update();

?>


                               Almir Neto
                         almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




         Deletando um registro
<?php

     $livro = DB_DataObject::factory('livro');
     $livro->get(42);

     $livro->delete();

?>



                               Almir Neto
                         almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




Relacionamentos utilizando Join
• Arquivo BD.links.ini

 [livro]
 formato_id = formato:formato_id

 [revisao]
 livro_id   = livro:livro_id
 cliente_id = cliente:cliente_id




                                  Almir Neto
                            almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




 Relacionamentos utilizando Join
<?php
   $revisao = DB_DataObject::factory('revisao');
   $cliente = DB_DataObject::factory('cliente');
   $revisao->livro_id = 4711;
   $revisao->joinAdd($cliente, 'INNER');
   $revisao->selectAdd('cliente.nome');
   $revisao->find();

     while ($revisao->fetch()) {
        echo $revisao->titulo.' (Revisor: '.
        $revisao->nome.')<br>';
        echo $revisao->descricao.'<br>';
     }
?>                               Almir Neto
                           almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




                   Método Fetch
function fetch()
{
   $ret = parent::fetch();
   if ($ret === false)
     return false;

     require_once(quot;cliente/cliente.phpquot;);
     $cliente = DB_DataObject::Factory('cliente');
     $cliente->get($this->cliente_id);
     $this->setCliente($cliente);

     require_once(quot;livro/livro.phpquot;);
     $livro = DB_DataObject::Factory('livro');
     $livro->get($this->livro_id);
     $this->setLivro($livro);

    return true;
                                Almir Neto
}
                          almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




                   Bibliografia
    Wikipédia - http://www.wikipedia.org
•
•   PHP - http://www.php.net
•   PEAR - http://pear.php.net
•   Markus Wolff



                               Almir Neto
                         almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




  Agradecimentos



                   Almir Neto
             almirneto@gmail.com
Mapeamento objeto-relacional em PHP com PEAR::Data_Object




               Fim



                   Almir Neto
             almirneto@gmail.com

Más contenido relacionado

Destacado

02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T IIHerdwangerSV
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.MongoDB
 
Presentació assamblea
Presentació assamblea Presentació assamblea
Presentació assamblea FC Barcelona
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáZarathon Maia
 
Lean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanLean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanJulien Fallet
 
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2dmc digital media center GmbH
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaManuel Menezes de Sequeira
 
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & ShipmanDominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipmanjonesshipman
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Daniel Rehn
 
Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?iniciativaverds
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxElton Minetto
 
Vortrag Georg-Simon-Ohm Hochschule:
Vortrag Georg-Simon-Ohm Hochschule: Vortrag Georg-Simon-Ohm Hochschule:
Vortrag Georg-Simon-Ohm Hochschule: Frank Braun
 

Destacado (16)

MySQL Query Optimization
MySQL Query OptimizationMySQL Query Optimization
MySQL Query Optimization
 
02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T II
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
 
Presentació assamblea
Presentació assamblea Presentació assamblea
Presentació assamblea
 
Digitale Mentalität II
Digitale Mentalität IIDigitale Mentalität II
Digitale Mentalität II
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc Quixadá
 
NotORM
NotORMNotORM
NotORM
 
Einführung in SCRUM
Einführung in SCRUMEinführung in SCRUM
Einführung in SCRUM
 
Lean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanLean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanban
 
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
 
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & ShipmanDominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
 
Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - Tchelinux
 
Vortrag Georg-Simon-Ohm Hochschule:
Vortrag Georg-Simon-Ohm Hochschule: Vortrag Georg-Simon-Ohm Hochschule:
Vortrag Georg-Simon-Ohm Hochschule:
 

Mapeamento Objeto-Relacional com PEAR::Data_Object

  • 1. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Almir Neto – almirneto@gmail.com CoNaPHP – CONISLI 2008 http://www.conaphp.com.br/ São Paulo, 18 e 19 de Outubro de 2008
  • 2. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Grupo de Desenvolvedores PHP de Goiás Lista de Discussão ● Troca de Conhecimentos ● Encontros ● Palestras ● Eventos ● Networking ● http://www.gophp.com.br ●
  • 3. Mapeamento objeto-relacional em PHP com PEAR::Data_Object O que é Mapeamento Objeto Relacional? • “Mapeamento objeto-relacional (ou ORM) é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada a objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes. Com esta técnica, o programador não precisa de se preocupar com os comandos em linguagem SQL; irá usar uma interface de programação simples que faz todo o trabalho de persistência.” Wikipédia Almir Neto almirneto@gmail.com
  • 4. Mapeamento objeto-relacional em PHP com PEAR::Data_Object O que é PEAR? • O PEAR (PHP Extension and Aplication Repository) é um framework e um sistema de distribuição para a codificação de componentes em PHP. • Mais Informações: http://pear.php.net Almir Neto almirneto@gmail.com
  • 5. Mapeamento objeto-relacional em PHP com PEAR::Data_Object PEAR::DB_DataObject • Dispensa o uso de SQL para operações CRUD(Create, Read, Update, Delete) • Portabilidade do Banco de Dados • Facilidade para manipular dados • Velocidade do desenvolvimento • Base de dados sempre documentada • Gera classes PHP com o mapeamento das tabelas • Métodos setters e getters automáticos Almir Neto almirneto@gmail.com
  • 6. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Arquivo de Configuração • Arquivo .ini [DB_DataObject] database = mysql://user:pw@host/BD schema_location = /dataobjects/schema/ class_location = /dataobjects/ require_prefix = /dataobjects/ extends_location = DB/DataObject.php extends = DB_DataObject • Arrays PHP Almir Neto almirneto@gmail.com
  • 7. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Gerando as Classes PHP $> createTables.php /diretorio/DataObject.ini • Arquivos criados: formato.php, livro.php, revisao.php, cliente.php, BD.ini Almir Neto almirneto@gmail.com
  • 8. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Classes Geradas <?php /** * Table Definition for formato */ require_once 'DB/DataObject.php'; class Formato extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ var $__table = 'formato'; // table name var $formato_id; // int(4) not_null primary_key unique_key unsigned auto_increment var $titulo; // string(40) /* ZE2 compatibility trick*/ function __clone() { return $this;} /* Static get */ function staticGet($k,$v=NULL) return DB_DataObject::staticGet('Formato',$k,$v); /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE } Almir Neto ?> almirneto@gmail.com
  • 9. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Arquivo de configuração gerado [livro] livro_id = 129 titulo = 130 descricao = 66 isbn = 130 [livro__keys] livro_id = N [cliente] cliente_id = 129 nome = 130 rua = 2 cep = 2 cidade = 2 [cliente__keys] cliente_id = N Almir Neto almirneto@gmail.com
  • 10. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Buscando registros pela chave primária <?php require_once('DB/DataObject.php'); require('config.php'); $livro = DB_DataObject::factory('livro'); $livro->get(42); echo 'Este é o livro: '.$livro->titulo; ?> Almir Neto almirneto@gmail.com
  • 11. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Buscando vários registros <?php $livro = DB_DataObject::factory('livro'); $livro->formato_id = 23; $num = $livro->find(); $i = 1; while ($livro->fetch()) { echo quot;Livro: $i de $num:{$livro->titulo}<br>quot;; $i++; } ?> Almir Neto almirneto@gmail.com
  • 12. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Adicionando condições <?php $livro = DB_DataObject::factory('livro'); $livro->whereAdd(quot;livro.titulo LIKE 'GOPHP%'quot;); $num = $livro->find(); $i = 1; while ($livro->fetch()) { echo quot;Livro: $i de $num: {$livro->titulo}<br>quot;; $i++; } ?> Almir Neto almirneto@gmail.com
  • 13. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Inserindo um registro <?php $livro = DB_DataObject::factory('livro'); $livro->titulo = 'Software Livre'; $livro->formato_id = 23; $livro_id = $livro->insert(); ?> Almir Neto almirneto@gmail.com
  • 14. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Atualizando um registro <?php $livro = DB_DataObject::factory('livro'); $livro->get(42); $livro->titulo = 'Software Livre'; $livro->update(); ?> Almir Neto almirneto@gmail.com
  • 15. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Deletando um registro <?php $livro = DB_DataObject::factory('livro'); $livro->get(42); $livro->delete(); ?> Almir Neto almirneto@gmail.com
  • 16. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Relacionamentos utilizando Join • Arquivo BD.links.ini [livro] formato_id = formato:formato_id [revisao] livro_id = livro:livro_id cliente_id = cliente:cliente_id Almir Neto almirneto@gmail.com
  • 17. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Relacionamentos utilizando Join <?php $revisao = DB_DataObject::factory('revisao'); $cliente = DB_DataObject::factory('cliente'); $revisao->livro_id = 4711; $revisao->joinAdd($cliente, 'INNER'); $revisao->selectAdd('cliente.nome'); $revisao->find(); while ($revisao->fetch()) { echo $revisao->titulo.' (Revisor: '. $revisao->nome.')<br>'; echo $revisao->descricao.'<br>'; } ?> Almir Neto almirneto@gmail.com
  • 18. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Método Fetch function fetch() { $ret = parent::fetch(); if ($ret === false) return false; require_once(quot;cliente/cliente.phpquot;); $cliente = DB_DataObject::Factory('cliente'); $cliente->get($this->cliente_id); $this->setCliente($cliente); require_once(quot;livro/livro.phpquot;); $livro = DB_DataObject::Factory('livro'); $livro->get($this->livro_id); $this->setLivro($livro); return true; Almir Neto } almirneto@gmail.com
  • 19. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Bibliografia Wikipédia - http://www.wikipedia.org • • PHP - http://www.php.net • PEAR - http://pear.php.net • Markus Wolff Almir Neto almirneto@gmail.com
  • 20. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Agradecimentos Almir Neto almirneto@gmail.com
  • 21. Mapeamento objeto-relacional em PHP com PEAR::Data_Object Fim Almir Neto almirneto@gmail.com