Bonjour.

J'ai un petit soucis pour gérer les relations entre mes tables. Je m'explique :

J'ai une table Users, une table News et une table, NewsComments défini à peu près comme suit :

Users(id, username, password, role)
News(id, user_id, title, content)
NewsComment(id, news_id, user_id, content)

J'ai donc relier mes modèles :
Users hasMany News, NewsComment
News belongsTo User, hasMany NewsComment
NewsComment belongsTo News, User

Et lorsque je vais sur la page view d'une News (News/view/150 par exemple) je récupère bien la news en question, je récupère bien le tableau avec les informations de l'utilisateur qui a écrit la news et je récupère également les commentaires liés à cette news. Seulement dans le tableau des commentaires, je ne récupère pas les informations de l'utilisateur qui a posté le commentaire en question. Comme si la requête n'allait pas chercher assez loin. J'ai bien tenté de jouer avec l'attribut recursive, mais rien n'y fait.

J'en viens donc à me demander si mes relations sont bonnes, etc, et c'est la raison de mon post.

En espérant avoir été assez clair, merci d'avance.

Bonne journée.

2 réponses


aschelch
Réponse acceptée

Bonjour,

Pour récupérer les informations des utilisateurs qui ont posté un commentaire, tu peux utiliser le comportement Containable
Il te suffit de mettre dans ton modèle News :

$actsAs = array('Containable');

Puis de faire la requête suivante :

$this->News->find('first', array(
   'conditions' => array(
       'News.id' => 150
   ),
   'contain' => array(
       'Users',
       'NewsComment',
       'NewsComment.Users'
   )
));

Bonne journée =)

jojo403
Auteur

Merci c'est parfait, c'est exactement ce qu'il me fallait :)

Bonne soirée.