"Não encontre um defeito, encontre uma solução."
Henry Ford

CakePHP, usando ORM

Posted by Alisson Nascimento 0 Comment

Mapeamento objecto-relacional (ou ORM) é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada aos objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.

Com esta técnica, o programador não precisa se preocupar com os comandos em linguagem SQL; ele irá usar uma interface de programação simples que faz todo o trabalho de persistência

E no CakePHP, usando esses models:

app/models/post.php

 

1
2
3
4
5
6
7
class Post extends AppModel{
   var $name="Post"
   var $hasMany = array('Comentario'=>
   array('className'=>'Comentario',
   'foreignKey'=>'post_id')
   );
   }

Na linha 5 onde tem a variável $hasMany eu digo que o model Post tem muitos do Model Comentario, em outras palavras, digo que a tabela comentarios tem um campo fk que se chama post_id. Isso implica que se fizer uma busca em Post por um id específico ou vários, a busca irá trazer também os comentário desse post.

app/models/comentario.php

1
2
3
4
5
6
7
class Comentario extends AppModel{
   var $name="Post";
   var $belongsTo = array( 'Post'=>
   array( 'className'=>'Post',
   'foreignKey'=>'post_id' )
   );
   }

 

Na linha 5 onde tem a variável $belongsTo eu digo que o model Comentario pertence ao model Post, isso implica que se fizer uma busca em Comentario por um id específico ou vários, a busca irá trazer também os post correspondente a cada comentário. Com os models organizados dessa forma se tiver no controller posts_controller.php, eu posso fazer uma busca em post assim:

1
$posts = $this->Post->find('all');

Mas se por acaso eu precisar nesse mesmo controller pegar só os comentarios de um post, pode-se fazer assim.

1
$comentarios = $this->Post->Comentario->find('all', array('conditions'=>array('post_id'=$post_id)));

Desde que os models estejam relacionados como no modelo entidade-relacionamento, estaremos programando de em OO de forma mais correta, sem precisar fazer requestAction ou ter que adicionar models na variável $uses do seu controller.

Let's Rock 'n Ride!

Posts relacionados:

  • Sem posts relacionados
Categories: CakePhp, Tips

About Alisson Nascimento

Ceriticado CAPM, Certified Associate in Project Management emitida pelo PMI - Project Management Institute, possui graduação em Sistemas de Informação pelo Centro Federal de Educação Tecnológica de Alagoas (2008), é especialista em Gestão de Projetos em TI pela Faculdade de Ciências Exatas de Alagoas (CESMAC). Bolsa, monitoria e estágio no CEFET-AL (atual IFAL) e Estágio 2007-2008 no Tribunal Regional do Trabalho da 19ª Região. Atualmente Desenvolvedor Web na Politec. Área de atuação : CakePhp, Desenvolvimento Web e Análise de Usabilidade. Linha de estudo: gestão empresarial, gestão de projetos e análise de usabilidade.