Bonjour à toutes et à tous,

J'ai une table Posts. Chaque post peut être relier à une ou plusieurs catégories. Une catégorie peut appartenir à plusieurs posts.

En terme de MCD cela donne ceci (en simplifié).
posts(id, title, content)
categories(id, name)
categories_post(category_id, post_id)

Voici mes deux models (situé dans app/models)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
class Post extends AppModel{        
    var $hasAndBelongsToMany = array('Category');
}
 
class Category extends AppModel{        
    var $hasAndBelongsToMany = array('Post');
}
Et mon PostController :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class PostsController extends AppController{
    var $paginate = array(
        'Post' => array(
            'limit' => 1,
            'order' => array('Post.created' => 'Desc')
        )
    ); 
    function index(){    
        $posts_list = $this->paginate('Post');
        $this->set('posts_list', $posts_list);
    }
    function category($category_id = null){
        if($category_id != null){
            $this->Post->bindModel(array('hasOne' => array('CategoriesPost')));
            $posts_list = $this->Post->find('all', array(        
                'conditions' => array('CategoriesPost.category_id' => $category_id)
            ));
 
            $this->set('posts_list', $posts_list); 
            $this->render('index');    
        }
    }
}
Mes catégories sont listés dans une page et lorsque je clique sur une catégorie, j'affiche les posts relatifs à cette catégorie avec la méthode

Code : Sélectionner tout - Visualiser dans une fenêtre à part
function category ($category_id = null){}
Seulement du coup la pagination ne fonctionne plus. J'aimerais donc réutiliser la pagination en prenant en compte ce tri préalable.

Je me doute bien qu'il faille redéfinir paginate dans la fonction category mais je ne sais pas comment faire avec plusieurs catégories.

Avez-vous une idée ?

Merci de votre aide.