2010-11-27 3 views
3

je les relations suivantes:Sélectionnez seulement certains champs de modèles associés à CakePHP

  • User hasMany UserNotification
  • Notification hasMany UserNotification
  • UserNotification belongsTo User, Notification

  • Table notifications a les colonnes suivantes: id, subject, content

  • users_notifications table a les colonnes suivantes: id, user_id, notification_id, status

Dans le UsersController, comment puis-je récupérer toutes les notifications d'un utilisateur? (Cela signifie, pour chaque notification, tous ces détails: sujet, contenu et statut).

Et aussi, comment puis-je limiter le nombre de champs retournés? Comme je fais la demande à partir du UsersController, je ne veux récupérer aucun champ du modèle User dans le tableau find().

Merci!

Répondre

3

Pour récupérer Notifications de la UsersController, il suffit de faire ceci:

$notifications = $this->User->Notification->find('all'); 

Fondamentalement, vous pouvez utiliser l'association pour accéder au modèle de notification.

Ensuite, afin de limiter les champs, vous pouvez aborder cela de deux manières. La première serait de définir la propriété $ récursive sur -1.

Utilisez cette ligne dans le modèle de notification si vous souhaitez que cela se produise partout dans votre application. Utilisez-le dans l'AppModel si vous le souhaitez pour chaque modèle.

var $recursive = -1; 

Vous pouvez également placer la ligne suivante avant l'instruction susmentionnée find():

$this->User->Notification->recursive = -1; 

La deuxième façon serait d'utiliser le comportement Containable.

Placez la ligne suivante dans votre modèle de notification (ou AppModel pour effet global):

var $actsAs = array('Containable'); 

Maintenant, par défaut, il ne serait pas tirer sur le modèle de l'utilisateur. Mais si vous avez toujours voulu qu'il soit tiré avec les données de notification, votre requête devrait ressembler à ceci:

$notifications = $this->User->Notification->find('all', array(
    'contain' => array('User') 
); 

Hope this helps!

+0

C'est le cas. Je vous remercie! – linkyndy

Questions connexes