Archive for the ‘Software Livre’ Category

Doctrine ORM, Parte I

Monday, April 27th, 2009

Eram meados de Outubro/2008 quando eu, que na época trabalhava em Brasília, no ministério da educação recebi um email com um convite interessante, participar do CONAPHP (Congresso Nacional de PHP), evento que seria realizado dentro do CONISL (Congresso Internacional de Software Livre), após ver a grade de palestras me interessei muito, pois lá estariam bons palestrantes como o Flávio Gomes (zend framework), Guilherme Blanco (Doctrine ORM), Elton Minetto (Desenvolvimento Web Escalável) entre outros. Essas três palestras me interessavam muito pois estavam totalmente de acordo com meus interesses e necessidades. Bom após a palestra do Guilherme Blanco sobre Doctrine, eu fiquei maravilhado com essa ferramenta, tanto que após a palestra dei um jeito de pegar o contato dele para poder tirar dúvidas e realmente começar a utilizar isso em meu trabalho. Voltei para Brasília, terminei a implantação do Zend Framework em minha equipe, fiz o acoplamento do Doctrine ORM dentro da estrutura do Zend Framework, e por uma sucessão de eventos vim para Joinville integrar a equipe da Drimio sob o “comando” de Elton Minetto. Mas tudo isso foi só para explicar como cheguei ao Doctrine ORM. A partir de agora sim, estarei fazendo uma breve introdução (na melhor das intenções) ao assunto.

O que é Dotrine ORM?

O Doctrine ORM, como seu próprio nome diz, é uma ferramenta de ORM (Object-relational mapping) ou no bom e velho pt-br: Mapeamento Objeto-Relacional. Foi concebida sob a licensa GNU Lesser General Public License. Suas principais influências foram o Hibernate(Java) e o ActiveRecord(Rails). Atualmente se encontra na versão 1.1.0 (estável) e é compatível com PHP 5.2.3+ pois o mesmo utiliza a biblioteca PDO.

Mas o que exatamente esse tal de Doctrine ORM faz?

Sua função simplificando, é reduzir a impedância do uso de Banco de Dados Relacionais e Sistemas Orientados a Objetos. Ele utiliza o Design Pattern Active Record para fazer abstração entre as tabelas do banco de dados e as suas respectivas classes, ou seja, para cada tabela no banco teremos uma classe correspondente. Sendo possível delegar a responsabilidade da criação das classes para o doctrine, mas isso é um outro assunto.

Legal, e tem mais? – Muito Mais…

Inspirado no HQL (Hibernate) foi criado o DQL (Doctrine Query Language) que eu acho muito bom, facilita muito na hora de criarmos consultas enxutas ou que tenham relacionamentos a serem pesquisados. Além disso há também a possibilidade de executar consultas com SQL nativo, mas é desencorajado, visto que uma parte do seu problema antes de usá-lo são justamente consultas com SQL nativos.

Fale-me mais Xorna, e é fácil para se achar? aprender mais? – É claro!!

Ele possuí uma boa documentação, com bastantes artigos, e uma comunidade de usuários que tende a crescer visto sua facilidade de acoplamento com frameworks populares. No próximo post daremos o ponta pé inicial em nossos estudos, mostrarei a instalação, estrutura de diretórios e começaremos nosso primeiro exemplo.

Compartilhe e socialize:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • E-mail this story to a friend!
  • LinkArena
  • LinkedIn
  • Live
  • Netvibes
  • Socialogs
  • Technorati
  • ThisNext
  • Yahoo! Buzz
  • YahooMyWeb

Utilizando o Zend_Db_Select

Thursday, December 4th, 2008

O uso da classe Zend_Db_Select é muito simples, o intuito dela é proporcionar ao desenvolvedor a possibilidade de fazer consultas complexas sem a necessidade de escrever código SQL, e sim utilizando um objeto, abaixo estarei mostrando alguns mini-exemplos.

Consulta simples, como um SELECT * FROM `users`

$select = new Zend_Db_Select();

$select->from(?users?);

$rs = $select->query();

$data = $rs->fetchAll();

Consulta com inserção de clausula WHERE, como um SELECT * FROM `users` WHERE `id` > 10:

$select = new Zend_Db_Select();

$select->from(?users?);

$select->where(?id > ??, 10);

$rs = $select->query();

$data = $rs->fetchAll();

· Consulta com seleção de campos e cláusula WHERE, como um SELECT id, name FROM `users` WHERE id > 10:

$select = new Zend_Db_Select();

$select->from(?users?);

$select->columns(?id, name?);

$select->where(?id > ??, 10);

$rs = $select->query();

$data = $rs->fetchAll();

· Consulta com seleção de campos e cláusula WHERE e INNER JOIN, como um SELECT `users`.`id`, `users`.`name`, `pictures`.`address` FROM `users` INNER JOIN `pictures` ON `pictures`.`user_id` = `users`.`id` WHERE id > 10;

$select = new Zend_Db_Select();

$select->from(?users?);

$select->columns(?users.id, users.name, pictures.address?);

$select->joinInner(?picures?, ?picures.user_id = user.id?);

$select->where(?id > ??, 10);

$rs = $select->query();

$data = $rs->fetchAll();

Além dos métodos utilizados acima a api da classe na qual o Drimio_Db_Select extende em http://framework.zend.com/apidoc/core/Zend_Db/Select/Zend_Db_Select.html

Compartilhe e socialize:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • E-mail this story to a friend!
  • LinkArena
  • LinkedIn
  • Live
  • Netvibes
  • Socialogs
  • Technorati
  • ThisNext
  • Yahoo! Buzz
  • YahooMyWeb

Profiling de consultas utilizando Firebug, FirePHP e Zend_Db_Profiler_Firebug

Wednesday, December 3rd, 2008

Um recurso muito interessante do navegador Firefox são suas extensões, e para os desenvolvedores web uma das extensões mais importantes é o Firebug, com ele você consegue fazer o profiling da camada de visão da sua aplicação, podendo por exemplo monitorar todas as requisições Ajax, seus cabeçalhos e dados, tempo de carregamento de cada arquivo da interface e o tamanho de cada um. Mas ele não para por aí, utilizando o FirePHP que é uma extensão do Firefox mas ele trabalha sobre Firebug, você consegue fazer profiling das camadas que são processadas no servidor, como a camada de modelo, que é o caso utilizado neste post. Abaixo estarei mostrando de maneira simples e objetiva como utilizar este recurso, assumindo que você já tenha instalado o Firefox, o Firebug e o FirePHP, então vamos lá:

No seu arquivo de bootstrap, após criar a sua conexão com o banco de dados, você deverá criar um profile e defini-lo como o profiler daquelas conexão:

$connection = Zend_Db::factory($adapter, $config);$profiler = new Zend_Db_Profiler_Firebug('All DB Queries');

$profiler->setEnabled(true);

$connection->setProfiler($profiler);

Após isso, basta ter o firebug e o firephp ativados para conferir o profiling de suas consultas no console do firebug.

Compartilhe e socialize:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • E-mail this story to a friend!
  • LinkArena
  • LinkedIn
  • Live
  • Netvibes
  • Socialogs
  • Technorati
  • ThisNext
  • Yahoo! Buzz
  • YahooMyWeb
Clicky Web Analytics