April
25
2008
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.

Poxa cara! Vlw pela dica =D
Eu tava precisando de uma coisa assim pra calcular a idade, e já implementei no meu sistema. Antes eu estava fazendo o cálculo via controller, mas não faz sentido, já que esta é uma logica do Model né?
O código fica mais clean e menos repetitivo, já que eu não preciso calcular TODA VEZ q precisar da idade do usuário =]
Mais uma vez, vlw pela dica aí!
[]’s