CakePHP查询构建问题

时间:2011-08-07 20:16:59

标签: cakephp

我正在尝试显示朋友名称列表,即:first_name和last_name。

我有一个友谊表,看起来像这样:

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代表子句((如果$ user == Friendship.friend_a,则SELECT friend_b)else((SELECT friend_a))“)

任何帮助表示赞赏...

1 个答案:

答案 0 :(得分:1)

设置友谊属于用户(或者你使用的任何模型;记得设置2个,1个用于friend_a,1个用于friend_b);将app_model设置为actAs Containable;并在代码中:

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

如果以上任何一项对您来说都是新手,请在食谱中查阅。