2011-08-16 2 views
0

J'ai utilisé des caches de compteur pour beaucoup de mes modèles. Une question que j'ai que je ne suis pas sûr de savoir comment faire.CakePHP: Caches de compteur, mais avec une petite torsion

J'ai un modèle d'utilisateur et un modèle d'activité. L'activité a une colonne appelée type qui peut être des choses comme, courir, marcher, etc.

Je sais que je peux facilement créer un cache de compteur pour activity_count dans la table users. Mais je veux avoir des colonnes de compteur comme run_count, walk_count qui comptent les activités avec type = "run", ou type = "walk", etc. mais avec toujours tous les avantages des mises à jour automatiques des comptes.

Y at-il un moyen facile de faire cela? Merci!

Répondre

0

non. Vous pouvez compter type = "run", ou type = "marcher", ou simplement compter normalement, mais seulement l'un d'entre eux. D'un autre côté, le code pour mettre à jour ça n'est pas trop mauvais. Vous pouvez également ajouter cette logique dans afterSave.

+0

ok comment pourrais-je compter un seul type? – pll

+0

counterScope: http://book.cakephp.org/view/1033/counterCache-Cache-your-count –

+0

également, existe-t-il un moyen de changer la colonne de compteur par défaut utilisée? Si j'ai une table "activités" et que je filtre pour marcher, puis-je avoir la mise à jour du compteur de compteur walk_count dans "users" au lieu d'être obligé d'utiliser "activity_count"? – pll

1

Vous pouvez le faire en utilisant COunterCache ... la seule chose à faire est que vous devez définir des relations séparées pour chaque activité. Tout d'abord permettez-moi de dire que ce n'est pas le meilleur wat pour résoudre dans la pratique, mais juste parce que vous demandé:

var $belongsTo = array(
         'UserWalk' => array(
       'counterCache' => true, 
       'foreignKey' => 'user_id', 
       'className' => 'User', 
       'conditions' => array('Activity.type' => 'walk'), 
       'counterScope' => array('Activity.type' => 'walk') 

         ), 
       'UserRun' => array(
       'counterCache' => true, 
       'foreignKey' => 'user_id', 
       'className' => 'User', 
       'conditions' => array('Activity.type' => 'run'), 
       'counterScope' => array('Activity.type' => 'run') 

         ), 
     ); 

Après que le gâteau va chercher le champ de comptage pour chaque modèle associé. Le fieldname pour le counterChache devrait maintenant être quelque chose comme user_run_count ou userrun_count (je ne connais pas la convention pour cela)

Questions connexes