Bonjour,
est ce qu'on peut utiliser le counterCache avec les relations HABTM ?
N.B: j'ai essayé le plugin HabtmCounterCache mais j'arrive pas à le faire fonctionner (peut être j'ai fait une erreur de configuration)
Merci d'avance

4 réponses


flashios09
Auteur
Réponse acceptée

Mon problème est résolu juste il faut modifier le model de liaison CategoriesPost avec ça :

<?php
class CategoriesPost extends AppModel
{

    public $belongsTo = array(
        'Category' => array('counterCache' => 'post_count'),
        'Post' => array('counterCache' => 'category_count')
    );

}

Ça marche sans l'utilisation d'un plugin ;)

Oui c'est possible. Après tu peux programmer le plugin toi même. Tu veux faire quoi pour ton counter cache?

j'ai deux models Category et Post et je veux savoir le nombre de posts lié à une catégorie et vice-versa.
J'utilise la relation HABTM car un post peut être lier à plusieurs catégories et une catégorie peut avoir plusieurs posts.
Voici mon code :
Post Model:

<?php
class Post extends AppModel
{

    public $actsAs = array('HabtmCounterCache.HabtmCounterCache' => array(
        'Category' => array('counterCache' => 'post_count')
    ));
    public $hasAndBelongsToMany = array('Category');
    public $hasMany = array('CategoriesPost');
}

Category Model:

<?php
class Category extends AppModel
{

    public $actsAs = array('HabtmCounterCache.HabtmCounterCache' => array(
        'Post' => array('counterCache' => 'category_count')
    ));
    public $hasAndBelongsToMany = array('Post');
    public $hasMany = array('CategoriesPost');

}

CategoriesPost Model:

<?php
class CategoriesPost extends AppModel
{

    public $belongsTo = array('Category', 'Post');

}

Voici la structure des tables:
categories(id,name,post_count),
post(id,name,category_count),
categories_posts(id,category_id,post_id)

lorsque j'ajoute un post le champs 'post_count' de la table 'categories' ne s'incrémente pas !!
à noter que j'utilise le callback afterSave(comme dans le tuto de Grafikart) dans le model pour ajouter une (ou plusieurs) nouvelle entré dans la table de liaisons categories_posts.

ca marche pas ça !