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