Meu nome é Elton Minetto

Criando uma pseudo-coluna no CakePHP

cakephp codes

Estou desenvolvendo um sistema grande usando o framework CakePHP e surgiu uma necessidade. Precisava criar uma pseudo-coluna com o resultado do cálculo de outras duas. Seguindo o conceito de MVC, achei mais interessante fazer este cálculo no Model para poder usar em todos os programas que utiizam aquela tabela. 

Para ilustrar isto montei um exemplo. Criei a seguinte tabela:

CREATE TABLE IF NOT EXISTS `clientes` (
  `id` int(11) NOT NULL auto_increment,
  `nome` varchar(100) NOT NULL,
  `sobrenome` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

O Model da tabela ficou da seguinte forma:

class Cliente extends AppModel {

  var $name = 'Cliente';
  var $validate = array(
 	'id' => VALID_NOT_EMPTY,
 	'nome' => VALID_NOT_EMPTY,
 	'sobrenome' => VALID_NOT_EMPTY,
  );

  /*
  funcao que é executada toda vez que é realizado uma consulta na tabela
  esta funcao adiciona o nome completo do cliente ao resultado como uma pseudo-coluna.
  idéia tirada de http://www.paulherron.net/articles/view/cakephp_afterfind_psuedofield
  */
  function afterFind($results) {
     if(isset($results['0']['Cliente'])) {
       foreach ($results as $key => $val) {
         $results[$key]['Cliente']['nome_completo'] = $results[$key]['Cliente']['nome']  . $results[$key]['Cliente']['sobrenome'] ;
       }
    }
   return $results;
  }
}

E na visão eu simplesmente imprimo a pseudo-coluna: 

echo $cliente['Cliente']['nome_completo'];

Simples assim.