dilluns, 8 de desembre del 2008

Utilitzant counterCache en associacions belongsTo

Una de les novetats que vaig veure revisant la documentació de la versió 1.2 no fa massa va ser que l’associació belongsTo incorporava un nou paràmetre: counterCache. El paràmetre counterCache permet mantenir un atribut amb el comptador de quants models té associat a través de hasMany.

Com utilitzar counterCache? Precisament em va anar perfecte perquè tenia un sistema de noticies amb comentaris i volia mostrar el número de comentaris de les noticies a la portada, així que m’estalvio de fer una consulta amb count o recuperar tots els comentaris amb una join per saber quants comentaris en total té cada noticia. Tenint els següents models:

Noticia hasMany Comentari
Comentari belongsTo Noticia

Al model Comentari la relació belongsTo es defineix amb counterCache com a true.

var $belongsTo = array(
    'Noticia' => array(
            'className' => 'Noticia',
            'counterCache' => true,
     )
);

Afegim el camp comentari_count a la taula de la BD noticies i llestos. Cada cop que s’insereixi (o s’esborri) un comentari, cake s’encarregarà d’actualitzar el camp comentari_count. Fàcil no?