2011-08-07 62 views
0

我想显示一个朋友名字列表,即:first_name和last_name。CakePHP查询构建问题

我有一个友谊表,它看起来是这样的:

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 

其中friend_a和friend_b是朋友。

然后,我有一个friendships_controller,与此:

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)) ); 
} 

并在视图,我有这样的:

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

并为每个$的朋友,我想呼应的名字朋友,这需要从用户表中检索。

问题:

我怎么也融入上述控制器查询:

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

其中x代表条款((如果$用户== Friendship.friend_a,然后选择friend_b)其他( (SELECT friend_a))“)

赞赏任何帮助...

回答

1

设定友谊属于关联用户(或无论您使用的模式;记得设置他们的2,1 frie nd_a,1代表friend_b);将app_model设置为actAs可包含;并在代码:

$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')) 
    ) 
); 

如果有任何的上面是新的给你,看看它的食谱。