SlideShare uma empresa Scribd logo
MAPEAMENTO OBJETO-RELACIONAL
   EM PHP COM OUTLET ORM



                       Fábio Rehm
O que é ORM?


Mapeamento objeto-relacional (ou ORM)
é uma técnica utilizada para reduzir as
dificuldades de se programar orientado a
objetos utilizando bancos de dados
relacionais.
                               (Wikipédia)
Diferenças
Relacional                OO
Diferenças
Relacional                OO
Diferenças
Relacional                OO
Diferenças
Relacional                OO
Diferenças
Relacional                OO




 ?
Diferenças
Relacional                OO




 ?
Diferenças
Relacional                OO




                          ?
Antigamente...
... era trabalhoso ...

 Baixa produtividade


                    X inúmeras
                      tabelas e
                      operações
... difícil de manter ...

 Duplicidade de código


                      X inúmeras
                        tabelas e
                        operações
... e difícil de modificar

Inviável substituir MySQL por outro banco
Soluções

 Banco de dados orientado a objetos
 Nem sempre OO é a melhor forma de se
  resolver um problema
 Mapeamento objeto-relacional:
   Table Data Gateway – Gateway de tabela
   Row Data Gateway – Gateway de linha de dados
   Active Record – Registro ativo
   Data Mapper – Mapeador de dados
       (Patterns of Enterprise Application Architecture, Martin Fowler)
Como funciona um ORM?

De forma simplificada:
 Classes são mapeadas em tabelas
 Instâncias (objetos) são (automaticamente)
  mapeadas em registros
Table Data Gateway
     http://martinfowler.com/eaaCatalog/tableDataGateway.html




 Uma classe por tabela
 Funções básicas de CRUD
 Pode implementar o relacionamento entre as
  tabelas
 Normalmente trabalha com arrays
Row Data Gateway
     http://martinfowler.com/eaaCatalog/rowDataGateway.html




 Classe para manipular uma linha da tabela
 Implementa apenas inserções e atualizações
Active Record
      http://martinfowler.com/eaaCatalog/activeRecord.html




 Semelhante ao Row Data Gateway
 Classes devem herdar de uma classe Registro
  que provê a funcionalidade básica
 Mistura de código para acesso a dados e
  lógica de domínio
Data Mapper
       http://martinfowler.com/eaaCatalog/dataMapper.html




 Persiste o modelo de objetos
 Mapeamento externo a classe
http://www.outlet-orm.org


 Pode ser visto como um conjunto de
    mapeadores de dados e tem o funcionamento
    semelhante ao (N)Hibernate
   Criado por Alvaro Carrasco (EUA) em ~2007
   Possui código aberto
   Consulta a objetos parecida com SQL
   Utiliza PDO “por baixo dos panos”
    http://br.php.net/manual/en/intro.pdo.php
   Banco de dados suportados:
     MySQL, PostgreSQL, SQLite, MS SQL (parcial)
simplicidade



10 arquivos
  +- 50 kb
liberdade




  ou
Requisitos

 PHP 5.1.6+
 Suporte a PDO para o banco de dados
  desejado
 PHP 5.2+ para suporte a objetos DateTime
Instalação

1.   Download
     http://www.outlet-orm.org/site/downloads
2.   Descompactar
3.   set_include_path(PASTA_DE_DESTINO.';' . get_include_path());
     (opcional)
Exemplo
Exemplo
Mapeamento
http://www.outlet-orm.org/manual/ch04.html
Mapeamento
http://www.outlet-orm.org/manual/ch04.html
Mapeamento
http://www.outlet-orm.org/manual/ch04.html
Mapeamento
http://www.outlet-orm.org/manual/ch04.html
Mapeamento em XML
http://groups.google.com.br/group/outlet-orm/files
Relacionamentos




              definição




              chave estrangeira



              definição
Relacionamentos
CRUD
CRUD
( mapa de identidade)
      http://martinfowler.com/eaaCatalog/identityMap.html




 Assegura que cada objeto seja carregado
  apenas uma única vez, mantendo cada objeto
  em um mapa.
CRUD
CRUD
CRUD - relacionamentos
Lazy loading
Fluent interface + Eager fetching
Futuro do projeto

 0.7 (versão corrente)
 1.0
   Ao que tudo indica será apenas a correção de bugs que já
      foram realizadas (svn/trunk) + suporte a múltiplas bases de
      dados
 2.0
     Suporte a chaves primárias compostas
     Unidade de trabalho
     Criação automática de tabelas
     …
 Plugin para eclipse
 Possível migração para Github (2.0 está indo para lá)
Unidade de trabalho
       http://martinfowler.com/eaaCatalog/identityMap.html




 Mantém uma lista de objetos afetados por
  uma transação de negócio
 Coordena a execução das ações (inserir,
  alterar, …)
Unidade de trabalho
Plugin para Eclipse
Referências:

 Patterns of Enterprise Application Architecture (Martin
  Fowler, 2003)
 http://www.slideshare.net/alegomes/mapeamento-or-
  com-hibernate
 http://www.slideshare.net/rob_knight/object-relational-
  mapping-in-php
Dúvidas?
Obrigado!
    Fábio Rehm

 fgrehm@gmail.com
  @fgrehm (twitter)

Mais conteúdo relacionado

PDF
Mapeamento Objeto Relacional com PHP - PHP Conference Brasil 2010
PDF
Linguagem PHP
PPTX
ParallaDB - Framework de Persistência Android e Desktop
PPT
Desenvolvimento Agil Com Doctrine Orm
PDF
Migrando para o PHP 5
PDF
Abstração do banco de dados com PHP Doctrine
PDF
Doctrine 2 camada de persistência para php
PDF
PHP Experience 2016 - [Palestra] Keynote: PHP-7
Mapeamento Objeto Relacional com PHP - PHP Conference Brasil 2010
Linguagem PHP
ParallaDB - Framework de Persistência Android e Desktop
Desenvolvimento Agil Com Doctrine Orm
Migrando para o PHP 5
Abstração do banco de dados com PHP Doctrine
Doctrine 2 camada de persistência para php
PHP Experience 2016 - [Palestra] Keynote: PHP-7

Mais procurados (20)

PDF
Introdução ao Ruby
PDF
Doctrine2 Seminário PHP
PDF
LabMM4 (T16 - 12/13) - PHP + MySQL
PDF
Aula 01 PHP+MySQL - LabMM4
PPTX
Aula 5 PHP - Criação de sites II
KEY
SPL Datastructures
PPTX
Arrays PHP - Criação de sites II
PDF
TDC 2014 POA: Programacao funcional Por que Importa?
PDF
PHP e MySQL para iniciantes
PDF
PL/Python: Programando em Python no PostgreSQL
PDF
Postgresql + Python = Power!
ODP
Processos iniciais do mapeamento OR
PDF
Php Math and arrays
PPSX
5 Maneiras de melhorar seu código PHP
PPTX
Introdução ao PHP - Criação de sites II
PPT
Introdução Ruby 1.8.7 + Rails 3
PDF
Curso mongo db com php
PDF
Palestra DataFlow - II São Paulo Perl Workshop
ODP
Workshop - Desenvolvimento web com Drupal 7
PPT
PHP - Arrays
Introdução ao Ruby
Doctrine2 Seminário PHP
LabMM4 (T16 - 12/13) - PHP + MySQL
Aula 01 PHP+MySQL - LabMM4
Aula 5 PHP - Criação de sites II
SPL Datastructures
Arrays PHP - Criação de sites II
TDC 2014 POA: Programacao funcional Por que Importa?
PHP e MySQL para iniciantes
PL/Python: Programando em Python no PostgreSQL
Postgresql + Python = Power!
Processos iniciais do mapeamento OR
Php Math and arrays
5 Maneiras de melhorar seu código PHP
Introdução ao PHP - Criação de sites II
Introdução Ruby 1.8.7 + Rails 3
Curso mongo db com php
Palestra DataFlow - II São Paulo Perl Workshop
Workshop - Desenvolvimento web com Drupal 7
PHP - Arrays
Anúncio

Semelhante a Mapeamento Objeto Relacional em PHP com Outlet ORM (20)

PDF
Implementando enterprise patterns com PHP
PPT
Bancos de Dados Orientados a Objeto
PDF
MAC5855 - NoSQL
PDF
[DTC21] Lucas Gomes - Do 0 ao 100 no Big Data
PDF
Introdução ao JPA com Hibernate
PDF
Introdução ao JPA com Hibernate
PDF
Tecnologias para mineração de dados nas nuvens
PPTX
Introdução ao Entity Framework 4
ODP
Bancos de dados No-SQL e afins
PPT
Mongo Db - PHP Day Workshop
PDF
Solisc2009 Migrando de Oracle para Postgresql
PDF
PostgreSQL-Prático.pdf
ODP
Seminário Hadoop
PPT
Interoperabilidade entre bancos de dados
PPT
Interoperabilidade entre bancos de dados
PPT
Hibernate
PPTX
Fluent NHibernate - Baby Steps
PPTX
Apresentação faef
PDF
Introdução a JPA (2010)
POT
Mini curso hibernate com anotações
Implementando enterprise patterns com PHP
Bancos de Dados Orientados a Objeto
MAC5855 - NoSQL
[DTC21] Lucas Gomes - Do 0 ao 100 no Big Data
Introdução ao JPA com Hibernate
Introdução ao JPA com Hibernate
Tecnologias para mineração de dados nas nuvens
Introdução ao Entity Framework 4
Bancos de dados No-SQL e afins
Mongo Db - PHP Day Workshop
Solisc2009 Migrando de Oracle para Postgresql
PostgreSQL-Prático.pdf
Seminário Hadoop
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
Hibernate
Fluent NHibernate - Baby Steps
Apresentação faef
Introdução a JPA (2010)
Mini curso hibernate com anotações
Anúncio

Último (16)

PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Arquitetura de computadores - Memórias Secundárias
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Processos na gestão de transportes, TM100 Col18
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Custos e liquidação no SAP Transportation Management, TM130 Col18
COBITxITIL-Entenda as diferença em uso governança TI
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Arquitetura de computadores - Memórias Secundárias
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...

Mapeamento Objeto Relacional em PHP com Outlet ORM