Desfazer associações em tempo de execução no cakePHP
Por muitas vezes, ao programar utilizando o cakePHP, nos deparamos com a situação de precisarmos de determinado campo que está em uma tabela associada, no entanto, em nosso model temos mais um ou dois relacionamentos no mesmo nível de recursão.
Vamos adotar a seguinte situação:
Nosso model em quesão chama-se Cidade
Cidade belongsTo Estado
Cidade belongsTo Pais
No exemplo acima, podemo ver que existem dois relacionamentos do mesmo nível, ou seja, quando fizermos uma consulta com o método find ou mesmo paginate, certamente teremos duas joins, retornando os resultados referentes às duas associações, mas suponhamos que apenas queremos o nome do Estado em que nossa cidade situa-se.
Para atingir o objetivo especificado, será necessário desfazer o relacionamento que foi definido no Model, e a ferramenta que podemos utilizar para tal tarefa é o unbindModel.
O que o unbindModel faz, é desfazer uma associação em tempo de execução, fazendo com que você possa requisitar apenas os dados referentes à tabela que deseja, desta forma dispensando a associação desnecessária com a tabela País, e evidentemente, melhorando a performance.
Abaixo, o exemplo de como desfazemos a associação com o unbindModel:
$this->Cidade->unBindModel(array('Pais'));
Feito isso, a associação já não mais existirá para a próxima consulta, sendo assim, podemos realizar o find normalmente, que a associação com País já não mais existe:
$cidade = $this->Cidade->find('all');
Desta forma, todas as cidades cadastradas no banco, serão exibidas, trazendo apenas os respectivos dados das tabelas Cidade e Estado.
Aí você me pergunta: E agora, minha associação com Pais está perdida ?
A resposta é NÃO. Tanto o unBindModel quanto o bindModel, removem a associação apenas para a próxima consulta que for realizada. Quando esta terminar, todas as associações são restauradas, sendo então necessário outro unbindModel, caso queira realizar o mesmo procedimento novamente.
Há também, formas de criar associações que não foram descritas na especificação do model, utilizando o bindModel, mas esta dica abordarei em outro artigo.
Em resumo, o unbindModel é o recurso ideal que todo desenvolvedor cake precisa quando há a necessidade de remover associações não desejadas em determinados momentos do código, sendo possível melhorar a performance das consultas realizadas pelo framework.
Postado por: Thiago Elias em 17/11/2009

