No 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.

faça 1 commit

BuscaPé, líder em comparação de preços na América Latina