SlideShare a Scribd company logo
1 of 51
Download to read offline
Doctrine 2
      Camada de persistência para PHP




  Fabio B. Silva :
   fabiosilva.info / fabio.bat.silva@gmail.com / @FabioBatSilva
Quem é esse cara ai ?
           •   Fabio B. Silva
           •   Desenvolvedor php
           •   Desenvolvedor java
           •   Doctrine core developer
           •   @FabioBatSilva
           •   github.com/FabioBatSilva
           •   Alcoolatra nas horas vagas
Doctrine ORM
Camada de persistência para PHP
Espera ai, o que é esse tal ORM ?
Espera ai, o que é esse tal ORM ?
O ORM (Object-relational mapping) é uma
camada intermediária entre um banco de
dados relacional e objetos. De um lado,
você tem as tabelas e seus
relacionamentos, do outro os objetos de
uma linguagem OO.
O que um ORM faz ?
•   Mapeia dados do DB para Objetos

•   Mapeia relacionamentos

•   Lida com conversão de tipos

•   Normalmente é cross database
Quais problemas ele resolve ?
•   Agiliza o desenvolvimento

•   Diminui a quantidade de código

•   Ótimo na maioria das situações

•   Te ajuda a usar o poder dos objetos

•   Faz parte de um bom design de software
Quais problemas você pode ter ?
•   Curva de aprendizado

•   Requer conhecimentos em OOP

•   Performance

•   Não resolve todos os problemas
Em quais casos devo usar ?
•   Se você gosta de OOP

•   Se estiver cansado de SQL

•   Se quiser algo ágil e de qualidade
Em quais casos NÃO devo usar ?
•   Se não conhece OOP

•   Se estiver desenvolvendo o facebook

•   Se sua aplicação for realmente pequena
ORM PHP
•   Doctrine

•   Propel

•   RedBeanPHP

•   PHPActiveRecord
ORM PHP
Esqueça os outros, vamos falar de doctrine !
Doctrine 1 : De onde viemos
•   PHP 5.2.3 +

•   Baseado no Active Record

•   Suporte a Migrations

•   Command line

•   Cache

•   Fácil de usar
Doctrine 1 : De onde viemos
Doctrine 1 : De onde viemos
Doctrine 1 : Problemas
 • Lento
 • ActiveRecord
 • Difícil de testar
 • Alto consumo de memória
 • Mesmo assim o melhor ORM disponível na época
Doctrine 2 : Onde estamos
●
    PHP 5.3 +
●
    Totalmente Rescrito
●
    Otimizado
●
    Componentes
     ●
        DBAL
    ●
        Common
    ●
        ORM
●
    Versão atual 2.2 ( 2.3 deve sair em julho )
DBAL
●
    Database Abstraction Layer
●
    Multi Plataforma
●
    SQL Query Builder
●
    Schema-Manager
Common
●
    Annotations
●
    Collections
●
    Events
●
    Cache
Common
Annotatinons
Common
Collections
Common
Cache
ORM
●   Baseado no JPA (Hibernate / EJB / Nhibernate)
●   Construído sobre componentes
●   Data Mapper
●   Objetos Simples
●   DQL
●   Otimizado
●   Performance
Classe Simples
Nada de estender classes do ORM
EntityManager
Ponte central de acesso as funcionalidades do ORM
EntityManager
Ponte central de acesso as funcionalidades do ORM
EntityManager
Ponte central de acesso as funcionalidades do ORM
Relacionamentos
●
    OneToOne
●
    ManyToOne
●
    OneToMany
●
    ManyToMany
Relacionamentos
OneToOne
Relacionamentos
ManyToOne
Relacionamentos
OneToMany
Relacionamentos
OneToMany




                                                 Mapeamento




        Mapeie o lado inverso apenas quando for usa-lo
Relacionamentos
ManyToMany
Herança
●
    Concrete Table Inheritance
●
    Single Table Inheritance
●
    Class Table Inheritance
Herança
●
    Concrete Table Inheritance
●
    Single Table Inheritance
●
    Class Table Inheritance




                     Uma classe em uma tabela
Herança
Concrete table inheritance
Herança
●
    Concrete Table Inheritance
●
    Single Table Inheritance
●
    Class Table Inheritance




                Várias classes em uma mesma tabela
Herança
Single table inheritance
Herança
●
    Concrete Table Inheritance
●
    Single Table Inheritance
●
    Class Table Inheritance




                   Várias classes em várias tabelas
Herança
Class table inheritance
DQL
Doctrine Query Language

●
    DQL : Doctrine Query Language
●
    Usa Classes e propriedades invés de tabelas e colunas
●
    Normalmente retorna uma lista de entidades
●
    Parseado para SQL nativa
●
    Cross database
DQL
DQL
DQL




  Você esta fazendo isso errado !!!
DQL
Cache
Melhor amigo da performance


●
    Metadata Cache
●
    Query Cache
●
    Result Cache
Cache
Melhor amigo da performance


●
    Metadata Cache
●
    Query Cache
●
    Result Cache




             Cache dos mapeamentos das entidades
Cache
Melhor amigo da performance


●
    Metadata Cache
●
    Query Cache
●
    Result Cache




            Cache dos parser de DQL para SQL nativa
Cache
Melhor amigo da performance


●
    Metadata Cache
●
    Query Cache
●
    Result Cache




               Cache dos resultados de consultas
Conclusão

●   Simplifica as coisas
●   Maduro e estável
●   Cresce a cada dia
●   Muita fácil de integrar com Symfony2
●   Doctrine é PHODA !!
Doctrine 2
          Camada de persistência para PHP


Perguntas ???




      Fabio B. Silva :
       fabiosilva.info / fabio.bat.silva@gmail.com / @FabioBatSilva

More Related Content

What's hot

Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonGuilherme Garcia
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPAPersistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPACaelum
 
Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Frederico Maia Arantes
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadMario Guedes
 
Boas práticas com jpa 2 e hibernate flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate flisol 2012Frederico Maia Arantes
 
Mapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMMapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMFábio Rehm
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONMario Guedes
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Inovações Na Plataforma Java
Inovações Na Plataforma JavaInovações Na Plataforma Java
Inovações Na Plataforma JavaFilipe Portes
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosWesley Lemos
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupWagner Roberto dos Santos
 

What's hot (20)

Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPAPersistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
 
Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
 
Boas práticas com jpa 2 e hibernate flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate flisol 2012
 
Java20141218 19
Java20141218 19Java20141218 19
Java20141218 19
 
Mapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMMapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORM
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSON
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Inovações Na Plataforma Java
Inovações Na Plataforma JavaInovações Na Plataforma Java
Inovações Na Plataforma Java
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
 
Zope
ZopeZope
Zope
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Anotações do mapeamento OR
Anotações do mapeamento ORAnotações do mapeamento OR
Anotações do mapeamento OR
 

Similar to Doctrine 2 ORM PHP

PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4javamanrj
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
Estudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologiasEstudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologiasHelio Henrique L. C. Monte-Alto
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasNatanael Simões
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 
1 ooi introducao
1 ooi introducao1 ooi introducao
1 ooi introducaonikson123
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 

Similar to Doctrine 2 ORM PHP (20)

Siga a doutrina certa
Siga a doutrina certaSiga a doutrina certa
Siga a doutrina certa
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Desenvolvimento web e PHP
Desenvolvimento web e PHPDesenvolvimento web e PHP
Desenvolvimento web e PHP
 
01 aula1 habib
01 aula1 habib01 aula1 habib
01 aula1 habib
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Estudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologiasEstudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologias
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
Postgres nuvens
Postgres nuvensPostgres nuvens
Postgres nuvens
 
Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on Rails
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 
Python para devs
Python para devsPython para devs
Python para devs
 
Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
 
1 ooi introducao
1 ooi introducao1 ooi introducao
1 ooi introducao
 
Treinamento ORM .Net
Treinamento ORM .NetTreinamento ORM .Net
Treinamento ORM .Net
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 

Doctrine 2 ORM PHP

  • 1. Doctrine 2 Camada de persistência para PHP Fabio B. Silva : fabiosilva.info / fabio.bat.silva@gmail.com / @FabioBatSilva
  • 2. Quem é esse cara ai ? • Fabio B. Silva • Desenvolvedor php • Desenvolvedor java • Doctrine core developer • @FabioBatSilva • github.com/FabioBatSilva • Alcoolatra nas horas vagas
  • 3. Doctrine ORM Camada de persistência para PHP
  • 4. Espera ai, o que é esse tal ORM ?
  • 5. Espera ai, o que é esse tal ORM ? O ORM (Object-relational mapping) é uma camada intermediária entre um banco de dados relacional e objetos. De um lado, você tem as tabelas e seus relacionamentos, do outro os objetos de uma linguagem OO.
  • 6. O que um ORM faz ? • Mapeia dados do DB para Objetos • Mapeia relacionamentos • Lida com conversão de tipos • Normalmente é cross database
  • 7. Quais problemas ele resolve ? • Agiliza o desenvolvimento • Diminui a quantidade de código • Ótimo na maioria das situações • Te ajuda a usar o poder dos objetos • Faz parte de um bom design de software
  • 8. Quais problemas você pode ter ? • Curva de aprendizado • Requer conhecimentos em OOP • Performance • Não resolve todos os problemas
  • 9. Em quais casos devo usar ? • Se você gosta de OOP • Se estiver cansado de SQL • Se quiser algo ágil e de qualidade
  • 10. Em quais casos NÃO devo usar ? • Se não conhece OOP • Se estiver desenvolvendo o facebook • Se sua aplicação for realmente pequena
  • 11. ORM PHP • Doctrine • Propel • RedBeanPHP • PHPActiveRecord
  • 12. ORM PHP Esqueça os outros, vamos falar de doctrine !
  • 13. Doctrine 1 : De onde viemos • PHP 5.2.3 + • Baseado no Active Record • Suporte a Migrations • Command line • Cache • Fácil de usar
  • 14. Doctrine 1 : De onde viemos
  • 15. Doctrine 1 : De onde viemos
  • 16. Doctrine 1 : Problemas • Lento • ActiveRecord • Difícil de testar • Alto consumo de memória • Mesmo assim o melhor ORM disponível na época
  • 17. Doctrine 2 : Onde estamos ● PHP 5.3 + ● Totalmente Rescrito ● Otimizado ● Componentes ● DBAL ● Common ● ORM ● Versão atual 2.2 ( 2.3 deve sair em julho )
  • 18. DBAL ● Database Abstraction Layer ● Multi Plataforma ● SQL Query Builder ● Schema-Manager
  • 19. Common ● Annotations ● Collections ● Events ● Cache
  • 23. ORM ● Baseado no JPA (Hibernate / EJB / Nhibernate) ● Construído sobre componentes ● Data Mapper ● Objetos Simples ● DQL ● Otimizado ● Performance
  • 24. Classe Simples Nada de estender classes do ORM
  • 25. EntityManager Ponte central de acesso as funcionalidades do ORM
  • 26. EntityManager Ponte central de acesso as funcionalidades do ORM
  • 27. EntityManager Ponte central de acesso as funcionalidades do ORM
  • 28. Relacionamentos ● OneToOne ● ManyToOne ● OneToMany ● ManyToMany
  • 32. Relacionamentos OneToMany Mapeamento Mapeie o lado inverso apenas quando for usa-lo
  • 34. Herança ● Concrete Table Inheritance ● Single Table Inheritance ● Class Table Inheritance
  • 35. Herança ● Concrete Table Inheritance ● Single Table Inheritance ● Class Table Inheritance Uma classe em uma tabela
  • 37. Herança ● Concrete Table Inheritance ● Single Table Inheritance ● Class Table Inheritance Várias classes em uma mesma tabela
  • 39. Herança ● Concrete Table Inheritance ● Single Table Inheritance ● Class Table Inheritance Várias classes em várias tabelas
  • 41. DQL Doctrine Query Language ● DQL : Doctrine Query Language ● Usa Classes e propriedades invés de tabelas e colunas ● Normalmente retorna uma lista de entidades ● Parseado para SQL nativa ● Cross database
  • 42. DQL
  • 43. DQL
  • 44. DQL Você esta fazendo isso errado !!!
  • 45. DQL
  • 46. Cache Melhor amigo da performance ● Metadata Cache ● Query Cache ● Result Cache
  • 47. Cache Melhor amigo da performance ● Metadata Cache ● Query Cache ● Result Cache Cache dos mapeamentos das entidades
  • 48. Cache Melhor amigo da performance ● Metadata Cache ● Query Cache ● Result Cache Cache dos parser de DQL para SQL nativa
  • 49. Cache Melhor amigo da performance ● Metadata Cache ● Query Cache ● Result Cache Cache dos resultados de consultas
  • 50. Conclusão ● Simplifica as coisas ● Maduro e estável ● Cresce a cada dia ● Muita fácil de integrar com Symfony2 ● Doctrine é PHODA !!
  • 51. Doctrine 2 Camada de persistência para PHP Perguntas ??? Fabio B. Silva : fabiosilva.info / fabio.bat.silva@gmail.com / @FabioBatSilva