2014-02-17 2 views
0

Я поражен одной проблемой, связанной с foreignKey концепции. У меня есть два стола users & user_relations.foreignKey в модели на основе состояния в cakephp

 users         user_relations 

    id username       id user_id friend_id status 
    1  abc        1  1   2  Accepted 
    2  def        2  2   3  Accepted 
    3  ghi        3  1   3  Accepted 

здесь friend_id является foreign_key и моя user_relations модель выглядит

public $belongsTo = array(
    'Friend' => array(
     'className' => 'User', 
     'foreignKey' => 'friend_id' 
    ) 
); 

Мои условия будут как

'conditions' => array(
    "OR" => array(
     'UserRelation.user_id' => $iLoggedUserId, 
     'UserRelation.friend_id' => $iLoggedUserId, 
    ), 
    'ViewerRelationship.status' => 'Accepted' 
) 

Теперь, когда пользователь "1" авторизован, то он получит информация о пользователях "2" & "3" на основе foreignKeyfriend_id.

Если пользователь "2" затем регистрируется, он получает информацию о пользователях "2" . Но здесь мне нужно получить информацию о пользователях "1" & "3". то есть, в одном случае необходимо принимать информацию на основе user_id а не friend_id

Если я могу держать foreignKey в состоянии я могу получить результат, основанный на user_id или friend_id.

Любая помощь пожалуйста ..!

+0

Попробуйте изменить ваше отношение к HABTM, как показано в этом ответе: HTTP: // stackoverflow.com/questions/10112825/multiple-relations-to-one-table-in-cakephp – theotherdy

ответ

0

Я не знаю, как это эффективно для вас.

Но он решит вашу проблему.

$respone = $this->UserRelation->find('all', 
array('conditions'=> array(
    'OR'=>array(
     'UserRelation.user_id' => $iLoggedUserId, 
     'UserRelation.friend_id' => $iLoggedUserId 
     ) 
    ), 
'fields' => array('UserRelation.*') 
)); 
$reqFriendsId = array(); 
foreach($respone as $key => $val){ 
    if($val['UserRelation']['friend_id'] == $iLoggedUserId){ 
    array_push($reqFriendsId, $val['UserRelation']['user_id']); 
    }else{ 
    array_push($reqFriendsId, $val['UserRelation']['friend_id']); 
    } 

} 

// Для зарегистрированного пользователя 1

Array 
(
[0] => 2 
[1] => 3 
) 

// Для зарегистрированного пользователя 2

Array 
(
[0] => 1 
[1] => 3 
)