2009-12-24 8 views
3

Je travaille sur une vue pour un blog qui mélange des billets de blog, des commentaires et des éléments de médias téléchargés dans une grande disposition de grille. J'ai mis en place les modèles individuels dans CakePHP et les associations, dont certaines sont les suivantes:Pagination de plusieurs modèles dans CakePHP 1.2.5

Comment BelongsTo Post or Media 
Post HasMany Media 

Qu'est-ce que je travaille avec essaie de trier tous les trois modèles (Comment, Media, Post) dans un large éventail de données que je peux ensuite paginer.

J'ai déjà un champ 'created' datetime dans la base de données. Je comprends comment paginer chacun des appels de base de données individuels en utilisant le CakePHP PaginationHelper. J'ai aussi fusionné les tableaux. Cependant, mélanger des appels de base de données individuels, puis fusionner les tableaux semble rompre la pagination, car il ne fonctionne pas avec le PaginationHelper (si je comprends bien).

Avez-vous des suggestions pour cela?

En outre, j'aimerais limiter le nombre d'appels à la base de données, de sorte que toute suggestion dans ce sens serait bonne. Merci!

~ Andrew

Répondre

5

On dirait que vous voulez utiliser une sorte de sélectionner UNION en ce qui concerne les 3 modèles. Vous pouvez y parvenir en remplaçant les méthodes paginate et paginateCount par défaut du modèle. Les bases sont couvertes dans le Cook Book (http://book.cakephp.org/view/249/Custom-Query-Pagination).

Il semble que vous aurez envie de remplacer la découverte (tout) avec find ('query') comme ceci:

/** 
* Overridden paginate method - group by week, away_team_id and home_team_id 
*/ 
function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) { 
    $recursive = -1; 
    $group = $fields = array('week', 'away_team_id', 'home_team_id'); 
    return $this->query('SELECT field1, field2 FROM table1 
         UNION SELECT field1, field2 FROM table2 
         LIMIT '.(($page-1)*$limit).', '.$limit); 
} 
+0

qui l'a fait! Merci beaucoup. –

+0

Pas de problème du tout :) – spelley