Relations entre les tables

Par jojo403, il y a 14 ans


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, il y a 14 ans

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, il y a 14 ans

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

Bonne soirée.