2011-08-07 2 views
0

J'essaie d'afficher une liste de noms d'amis à savoir: prénom et nom de famille.CakePHP Query question de construction

J'ai une table d'amitiés, qui ressemble à ceci:

id , friend_a , friend_b , created , modified 
1 , 1 , 3 , created , modified 
1 , 1 , 7 , created , modified 
1 , 4 , 1 , created , modified 
1 , 2 , 6 , created , modified 

où friend_a et friend_b sont des amis.

Puis-je avoir un friendships_controller, avec ceci:

function get_my_friends(){ 
    $this->set('user', $this->passedArgs['user'] ); 

    $conditions = array(
     'OR' => array(
     array("Friendship.friend_a" => $this->passedArgs['user']), 
     array("Friendship.friend_b" => $this->passedArgs['user']) 
     ) 
    ); 

    $this->set('friends', $this->Friendship->find('all',array('conditions'=>$conditions)) ); 
} 

Et dans la vue, je ceci:

<?php foreach($friends as $friend): ?> ... 

Et pour chaque ami $, je veux faire écho au nom de cette ami, qui doit être récupéré à partir de la table des utilisateurs.

QUESTION:

Comment puis-je aussi intégrer dans la requête du contrôleur ci-dessus:

SELECT first_name, last_name FROM users AS friend_name WHERE users.id = x 

Où x représente la clause ((si l'utilisateur $ == Friendship.friend_a, puis sélectionnez friend_b) autre ((SELECT friend_a)) ")

Toute aide appréciée ...

Répondre

1

mis Amitié belongsTo utilisateur (ou quel que soit le modèle que vous utilisez, rappelez-vous de mettre 2 d'entre eux, 1 pour frie nd_a, 1 pour friend_b); définissez app_model à actAs Containable; et dans le code:

$this->set('friends', $this->Friendship->find('all',array(
    'conditions'=>$conditions)), 
    'contain'=>array(
     'name_of_the_relationship_you_set_for_friend_a'=>array('fields'=>array('first_name', 'last_name')), 
     'name_of_the_relationship_you_set_for_friend_b'=>array('fields'=>array('first_name', 'last_name')) 
    ) 
); 

Si l'un des est nouveau pour vous ci-dessus, chercher dans le livre de cuisine.