Bonjour,

J'ai commencé a faire un forum, avec deux tables,
Une categories avec le behavior tree.
Une messages.

Catégories contient plusieurs message (HasMany).

Je me heurte a un problème, je ne sais pas comment faire de façon optimisé pour compter le nombre de messages présent, et les infos du dernier message, comme c'est le cas sur ce forum.
Quelqu'un aurais une idée ?

2 réponses


neoris
Réponse acceptée

Pour récupérer le nombre de message par catégories il y a plusieurs méthodes je pense,
tu peux mettre dans ton model 'message' un countercache à true dans ta relation avec category :

var $belongsTo = array(
        'Category' => array(
            'counterCache' => true
        )

et en ajoutant dans ta table 'categories' un champ 'message_count'.
Sinon en faisant un $this->Message->find('count'); dans ton controlleur , avec un tableau de conditions du style 'conditions' => array('Category.id' => $id)
Ce find permettra de compter le nombre de lignes dans ta table Message ayant un id_category valant $id

Après pour récupérer les infos du dernier message, faudra surement ajouter une condition sur Message.created

Flohw
Réponse acceptée

étant donné que compter le nombre de messages, tu as souvent a le faire et pour afficher un nombre de message le plus précis au visiteur, je te conseille de mettre dans ta base de donnée le nombre de message et tu mets à jour lorsqu'on poste. c'est nettement plus simple et bien mieux je trouves.
Le cache n'est pas mal mais en fonction de la durée du cache, tu peux ne pas avoir un nombre exact et si quelqu'un comme moi met la taille du cache à 0, il devra recharger a chaque fois et il sera pénalisé.