2010-02-19 5 views
0

Je me bats un peu avec les relations CakePHP HABTM, et je me suis bloqué en essayant de faire une tâche apparemment simple. J'ai beaucoup de Camps et de nombreux NewsItems. Chaque élément d'information peut être pertinent pour l'un des camps, donc lorsqu'un utilisateur crée un élément, il vérifie à quel camp l'objet est destiné. C'est l'idée.CakePHP et HABTM Tag Filtering

Alors ...

Je voudrais intégrer un certain camp filtrant dans mes vues bulletins d'informations. En d'autres termes, j'aimerais voir tous les articles d'information pertinents au camp «A» et au camp «B». Ajouter des conditions aux fonctions «trouver» et «paginer» fonctionne comme un charme.

Mais ...

Si un NewsItem appartient à plusieurs camps, il semble à plusieurs reprises dans la liste. Alors quand je dis de trouver tous les NewsItems qui appartiennent au Camp "A" et au Camp "B", un NewsItem appartenant au Camp "A" et au Camp "B" apparaîtra deux fois.

La requête ressemble debug ceci:

SELECT NewsItem. id, NewsItem. user_id, NewsItem. heading, NewsItem. body, NewsItem. modified, User. first_name DE news_items AS NewsItem LEFT JOIN users AS User ON (NewsItem. user_id = User. id) LEFT JOIN camps_news_itemsCampsNewsItem AS ON (CampsNewsItem. news_item_id = NewsItem. id) OÙ CampsNewsItem. camp_id IN (1, 5) COMMANDEZ PAR NewsItem. modified desc LIMITE 10

SELECT Camp. id, Camp. name, Camp. created, Camp. modified, CampsNewsItem. camp_id, CampsNewsItem. news_item_id DE camps AS Camp REJOIGNEZ camps_news_items AS CampsNewsItem ON (CampsNewsItemnews_item_id IN (6, 6, 7, 8) ET CampsNewsItemcamp_id = Campid...) OU 1 = 1

Le code php ressemble à ceci:

$camp_ids = array(1, 3, 6, 10); 
$conditions = array('CampsNewsItem.camp_id' => $camp_ids); 

$params['conditions'] = $conditions; 
$this->NewsItem->bindModel(array('hasOne' => array('CampsNewsItem'))); 
$news_items = $this->NewsItem->find('all', $params); 

Merci pour tout renseignement!

Répondre

2

Essayez ceci:

$params['group'] = array('NewsItem.id'); 
+0

Parfait! Merci beaucoup! –

+0

Une idée de comment faire fonctionner correctement l'assistant paginate? –