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!