Doctrine ORM

Agosto 7, 2009 on 11:56 am | In Informatica, php |

Agora vou falar da ultima novidade nos meus projetos, o uso do Doctrine como camada de abstração de dados. Ele foi criado com base do Hybernation do Java, assim absorvendo bastante idéias e design patterns, eu não conheço profundamente todos os recursos, mas o pouco que tenho usado ja tem me ajudado muito, vou descrever o que ele pode fazer, como tem me ajudado e mais para frente uns tutoriais mais específicos com códigos do Doctrine.

O Doctrine é um object-relational mapper ou ORM (mapeador de objeto-relacional), a idéia fica por conta de acessar todos os seus dados mySQL ou de banco através de objetos PHP, chega de querys complexas e gambiarras com php-mySQL. Ele segue o design pattern criado pelo Martin Fowler de Active Record (isso mesmo o mesmo criador do MVC), que é a idéia de objeto ser a referência da tabela.

Exemplo:

PHP:
  1. // Para salvar algo na tabela usuario
  2. $User = new Usuario();
  3. $User->nome = 'nome do usuario';
  4. $User->usuario = 'usuario';
  5. $User->senha = 'senha123dificil';
  6. $User->save();

Agora com essa idéia você pode escrever Query SQL com OO, o dialeto do doctrine é o DQL (Doctrine Query Language), que é possível trazer todos objetos relacionais (tabelas relacionais) de forma bem simples, vejamos um exemplo de DQL e SQL:

DQL:

PHP:
  1. $q = Doctrine_Query::create()
  2.     ->from('User u')
  3.     ->leftJoin('u.Phonenumbers p');

SQL:

PHP:
  1. SELECT
  2. u.id AS u__id,
  3. u.is_active AS u__is_active,
  4. u.is_super_admin AS u__is_super_admin,
  5. u.first_name AS u__first_name,
  6. u.last_name AS u__last_name,
  7. u.username AS u__username,
  8. u.password AS u__password,
  9. u.type AS u__type,
  10. u.created_at AS u__created_at,
  11. u.updated_at AS u__updated_at,
  12. p.id AS p__id,
  13. p.user_id AS p__user_id,
  14. p.phonenumber AS p__phonenumber
  15. FROM user u
  16. LEFT JOIN phonenumber p ON u.id = p.user_id

Ainda tem muito mais características, vale a pena dar uma olhada no próprio site do Doctrine ou usar o google, mas so com essas definições nos podemos dizer que:

  • Vamos programar mais rápido
  • Queries ficarão mais simples que o SQL
  • Não nos preucuparemos mais com nosso Model
  • Trabalharemos com Objetos e listas de queries

Entao apartir da definição do Schema da base de dados o próprio Doctrine cria todos os códigos de Model ai podemos livremente instanciar Objetos relacionais e salvar, deletar e afins.


3 Comments »

RSS feed for comments on this post. TrackBack URI

  1. Salve,

    Eu uso o SQLReactor, baseado no SQLAlchemy do Python, e achei muito bom e é brasuca.

    Valeu!

    Comment by Silas Ribas — Agosto 7, 2009 #

  2. Como eu faço para gerar os modelos do doctrine?

    Comment by Marcus — Setembro 2, 2009 #

  3. Blz.

    Gostaria de saber se há como separar os modelos gerados pelo Doctrine em diretorios dentros dos módulos correspondentes a sua estrutura MVC.

    Como fazer isto.

    Sentirei-me grato pela restposta.
    Obrigado.

    Comment by Milton — Janeiro 25, 2010 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


 

 Assine o feed