2010-08-30 3 views
1

Est-il en quelque sorte possible de créer une relation hasMany qui utilise un ID en dehors du modèle? Par exemple, un utilisateur a beaucoup de commentaires, mais je voudrais trouver seulement les commentaires de l'utilisateur connecté:CakePHP, HasMany Relation

public $hasMany = array(
    'MyComment' => array(
      'className' => 'Comment', 
      'foreignKey' => 'user_id', 
      'dependent' => false, 
      'conditions' => array('Comment.user_id' => $loggedinUser_id), 
      'fields' => '', 
      'order' => '', 
      'limit' => '', 
      'offset' => '', 
      'exclusive' => '', 
      'finderQuery' => '', 
      'counterQuery' => '' 
     ) 
); 

Je pensais passer le loggedinUser_id $ dans les contrôleurs beforeFilter() au modèle. Est-ce un bon moyen de résoudre ce problème ou existe-t-il de meilleurs moyens?

Toute suggestion est appréciée. Merci beaucoup!

+0

J'ai eu une très bonne réponse à cette question ici: http://stackoverflow.com/questions/3619891/hasmany-relationship-and-id-from-other-model-in-cakephp – chris

Répondre

0

Voulez-vous toujours et uniquement accéder aux commentaires de l'utilisateur connecté? Ne vas-tu pas vouloir montrer les commentaires des autres à un moment donné?

Je vous suggère de définir cela comme une condition dans chaque appel à Model :: find() de votre contrôleur. En outre, en fonction de types de relations spécifiques, vous devrez peut-être utiliser le comportement Contenable pour filtrer en fonction des critères de modèle associés (généralement pour HABTM plutôt que HM).

+0

Merci pour votre réponse et désolé pour ma mauvaise explication. S'il vous plaît voir mon commentaire sur la réponse @cdburgess. – chris

2

Je conseillerais de suivre le mode de pensée «modèle de graisse, contrôleur de peau». Je voudrais construire une fonction dans le modèle appelé: user_only_comments (ou quelque chose qui aurait du sens pour vous).

// in the comment model 
function user_only_comments($id) { 
    return $this->find('all', array('conditions' => array('Comment.user_id' => $id))); 
} 

Ensuite, dans le contrôleur, vous suffit d'appeler:

$user_comments = $this->Comment->user_only_comments($user_id); 

Ensuite, vous êtes bon pour aller et votre contrôleur est non seulement agréable et propre, mais vous pouvez appeler ce modèle méthode spécifique partout sans avoir écrire les conditions chaque fois. Si les conditions changent, vous pouvez le changer à un endroit au lieu de partout dans le contrôleur que vous définissez la condition.

+0

Ok, mon explication était très mauvaise, désolé pour ça. Je veux obtenir tous les commentaires et chaque commentaire a beaucoup de "j'aime" de différents utilisateurs. Maintenant, j'ai besoin de savoir si l'utilisateur connecté a aimé un commentaire. C'est pourquoi je voudrais créer une relation spéciale dans le modèle qui me dit juste si l'utilisateur connecté a aimé le commentaire. – chris

Questions connexes