counterCache avec la relation HABTM

Par flashios09, il y a 13 ans


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

Ciloe, il y a 13 ans

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

flashios09, il y a 13 ans

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.

flashios09, il y a 13 ans

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 ;)

ndiayejp, il y a 12 ans

ca marche pas ça !