Dans le tutoriel précédent : Mise en place du counterCache : un piège à éviter, nous avions vu comment mettre en place le counterCache entre deux modèles associés en belongsTo et comment mettre à jour le compteur d’origine, lorsqu’un enregistrement change de parent.
L’astuce consistait à placer notre logique dans les callbacks beforeSave et afterSave du modèle Post, dans lequel est déclarée l’association belongsTo avec le modèle Category. Tout cela fonctionne bien pour un modèle dont les enregistrements n’ont aucune relation entre eux.
Mais si le modèle Category est construit comme un arbre hiérarchique, avec des sous-catégories sur plusieurs niveaux, l’astuce ne met à jour que le compteur de la branche finale à laquelle est attaché le post. Si nous avions besoin d’afficher le nombre total d’enregistrements de tous les enfants d’une branche parente, il faudrait faire une requête ou un traitement PHP spécifique pour le calculer et le passer à la vue. Lire la suite