CakePHP 1.2: Models retornar apenas o necessário
| maio 30th, 2009No CakePHP 1.2, ficou mais fácil retornarmos do nossos modelos apenas aquilo o que realmente esperamos, no core do CakePHP 1.2, foi adicionado o behavior Containable, o qual se propõem, a filtrar o relacionamentos entre os modelos no CakePHP.
Com este, conseguimos quando fazemos retrive em algum modelo, fazer com que ele traga justamente aquilo que achamos pertinente, ou seja, apenas o resultado desejado, com isso poupando dados redundantes, assim como melhorando a performance por o modelo deixar, de trazer relacionamentos que não são necessários.
O uso do mesmo no CakePHP, é muito simples, basta chamar ele no modelo, que julga pertinente, ou adicionar no AppModel para que todos os modelos herdem esse behavior, Countaible.
1 2 3 | class AppModel extends Model { public $actsAs = array('Containable'); } |
ou on the fly:
1 | $this->Modelo->Behaviors->attach('Containable'); |
Após a importação seu uso é simples, imaginamos um ambiente onde temos os seguintes modelos:
Post, User, Comment, Tag, onde:
1 2 3 | Post belongsTo User Post hasMany Comment Post hasAndBelongsToMany Tag |
Agora supúnhamos que desejamos fazer uma listagem dos últimos posts, logo só precisamos exibir os dados, do Post, o User que escreveu esse Post e as Tags desse post.
1 2 | $this->Post->contain('User','Tag'); debug($this->Post->find('all', array('limit' => 10))); |
outro exemplo:
1 | $this->Post->contain('Comment.author = "Gabriela"'); |
Com isso filtramos os resultados que o find do Post deve trazer, isso pode ser feito com diversos relacionamentos:
1 2 | $this->User->contain('Profile', 'Scrap', 'Scrap.User', 'Album.Photo'); $this->User->find('all'); |
Conseguimos definir os relacionamentos entre os modelos que desejamos trazer, é uma boa alternativa para o:
1 | $this->Modelo->recursive |
Resumindo o Containable é sempre uma grande opção, na ora de usar o find, pois com eles conseguimos definir exatamente o que desejamos que o find traga para nós.