ORM no PHP5 utilizando o SQLReactor
O SQLReactor é uma ferramenta de ORM open-source e gratuita. É um projeto bem recente, ainda em constante desenvolvimento, mas com bastante diferencial em relação à outras ferramentas de ORM para PHP. Apesar de nova a ferramenta apresenta uma ótima quantidade de recursos e muita facilidade tanto no estágio de mapeamento, quanto de uso dos objetos.
Alguns recursos do SQLReactor:
- Atualmente (versao 0.3) suporta MySQL, PostgreSQL, SQLite e Oracle;
- Provê getters e setters automáticos para todos os objetos com possibilidade de overload;
- Busca automática (lazy load) para as relações (ForeignKey);
- Possibilidade de definir quais relações devem ser carregadas em uma única busca (eager load) (mais detalhes adiante);
- Possibilidade de navegação na árvore dos objetos em qualquer nível, tanto para a busca quanto para o eager load (mais detalhes adiante);
- Provê métodos para criação das tabelas;
- Possibilidade de mapeamento de um banco de dados já existente, com tradução para os nomes de atributos;
- Tradução automática de tipos de dados do PHP para o tipo do banco e vice versa;
Para utilizar o SQLReactor, você precisa de:
- Um banco de dados (MySQL, PostgreSQL, SQLite ou Oracle);
- PHP5 configurado com suporte ao banco de dados desejado;
- Ultima versão do SQLReactor, que pode ser baixada em: http://sourceforge.net/projects/sqlreactor ;
- Dar include do arquivo principal: SQLReactor.php;
Alguns recursos do SQLReactor:
- Atualmente (versao 0.3) suporta MySQL, PostgreSQL, SQLite e Oracle;
- Provê getters e setters automáticos para todos os objetos com possibilidade de overload;
- Busca automática (lazy load) para as relações (ForeignKey);
- Possibilidade de definir quais relações devem ser carregadas em uma única busca (eager load) (mais detalhes adiante);
- Possibilidade de navegação na árvore dos objetos em qualquer nível, tanto para a busca quanto para o eager load (mais detalhes adiante);
- Provê métodos para criação das tabelas;
- Possibilidade de mapeamento de um banco de dados já existente, com tradução para os nomes de atributos;
- Tradução automática de tipos de dados do PHP para o tipo do banco e vice versa;
Para utilizar o SQLReactor, você precisa de:
- Um banco de dados (MySQL, PostgreSQL, SQLite ou Oracle);
- PHP5 configurado com suporte ao banco de dados desejado;
- Ultima versão do SQLReactor, que pode ser baixada em: http://sourceforge.net/projects/sqlreactor ;
- Dar include do arquivo principal: SQLReactor.php;
Pra quem interessar, também existe um grupo para discussão de dúvidas sobre o projeto.
http://groups.google.com.br/group/sqlreactor-brasil
Abraços
http://groups.google.com.br/group/sqlreactor-brasil
Abraços
29/05/2009 2:57pm
(~15 anos atrás)
Marcos,
Você está completamente correto ao dizer da quantidade de recusos. Como eu mesmo disse no artigo, é um projeto bem novo (versao 0.3) e precisa mesmo de muitas coisas ainda. Conheci o Doctrine recentemente e concordo com você que ele vale muito a pena.
Porém, discordo quanto ao propel. O mapeamento de objetos não é tão simples e, mesmo o SQLReactor sendo novo, ja faz, de forma simples, coisas chatas de se fazer no propel, por exemplo. (Como fazer eagerload de múltiplos níveis)
Se você conhecer python, vai notar que a forma de mapeamento do SQLReactor se basea na forma do SQLObject, que é muito simples... Já a forma de busca e acesso aos dados, assemelha-se ao SQLAlchemy, que é considerado um dos mais completos pra python.
O reactor nasceu pra ser diferente dos outros ORMs em PHP. Eu o considero mais prático. Mas cada um prefere o seu. O objetivo do artigo é divulgar mais uma ferramenta de ORM e mostrar como funciona.
Fica por conta de cada desenvolvedor a escolha do seu.
Abraços,
Rafael
Você está completamente correto ao dizer da quantidade de recusos. Como eu mesmo disse no artigo, é um projeto bem novo (versao 0.3) e precisa mesmo de muitas coisas ainda. Conheci o Doctrine recentemente e concordo com você que ele vale muito a pena.
Porém, discordo quanto ao propel. O mapeamento de objetos não é tão simples e, mesmo o SQLReactor sendo novo, ja faz, de forma simples, coisas chatas de se fazer no propel, por exemplo. (Como fazer eagerload de múltiplos níveis)
Se você conhecer python, vai notar que a forma de mapeamento do SQLReactor se basea na forma do SQLObject, que é muito simples... Já a forma de busca e acesso aos dados, assemelha-se ao SQLAlchemy, que é considerado um dos mais completos pra python.
O reactor nasceu pra ser diferente dos outros ORMs em PHP. Eu o considero mais prático. Mas cada um prefere o seu. O objetivo do artigo é divulgar mais uma ferramenta de ORM e mostrar como funciona.
Fica por conta de cada desenvolvedor a escolha do seu.
Abraços,
Rafael
23/05/2009 5:39pm
(~15 anos atrás)
O artigo é realmente válido. Usar ORM tende a se tornar padrão em qualquer priojeto e em qualquer linguagem.
Quanto ao SQLReactor só o que tenho a dizer é que ele está muito longe das funcionalidades de outros ORMs mais maduros como o Propel <http://propel.phpdb.org/trac/> e o Doctrine <http://www.doctrine-project.org/>. Esses sim valem muito a pena.
Eu mesmo construi um ORM que ainda uso em alguns projetos mais antigos. Dieferente desses mencionados que utilizam o Pattern Active Record <http://pt.wikipedia.org/wiki/Active_record> eu usei o Pattern DAO <http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html>.
Outro ponto é a classe de abstração. Eu já utilizava PDO no meu ORM desde o início (quando foi lançado junto com a versão 5 do PHP) e agora todos tendem a migrar para ele assim como fez o Propel que utilizava Creole.
Alias o modelo de ORM que acho interessante e que inclusive "copie" diversas idéias é o JPA do Java.
Quanto ao SQLReactor só o que tenho a dizer é que ele está muito longe das funcionalidades de outros ORMs mais maduros como o Propel <http://propel.phpdb.org/trac/> e o Doctrine <http://www.doctrine-project.org/>. Esses sim valem muito a pena.
Eu mesmo construi um ORM que ainda uso em alguns projetos mais antigos. Dieferente desses mencionados que utilizam o Pattern Active Record <http://pt.wikipedia.org/wiki/Active_record> eu usei o Pattern DAO <http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html>.
Outro ponto é a classe de abstração. Eu já utilizava PDO no meu ORM desde o início (quando foi lançado junto com a versão 5 do PHP) e agora todos tendem a migrar para ele assim como fez o Propel que utilizava Creole.
Alias o modelo de ORM que acho interessante e que inclusive "copie" diversas idéias é o JPA do Java.
23/05/2009 4:33pm
(~15 anos atrás)
Fala ae Rapaz....
Parabens pelo artigo, ficou muito bom....
abraço
fui
Parabens pelo artigo, ficou muito bom....
abraço
fui
22/05/2009 12:45pm
(~15 anos atrás)
O SQLReactor é genial. Amei o artigo :D