2011-10-11 3 views
0

저는이 find() 쿼리와 잠시 씨름하고 있습니다. 표에 대한 참조는 CakePHP Twitter-clone: Can't get follow-system to work의 질문을 참조하십시오.CakePHP가 HABTM 관계의 찾기 쿼리에서 잘못된 열을 반환했습니다.

그러나 간단히 말해서, 이것은 자발 학습을 위해 수행하고있는 트위터 클론을위한 것입니다. 나는 세 개의 테이블을 가지고있다.

Users (id, name) 
Tweets (id, user_id, content, date) 
UserUsers (id, user_id, follower_user_id) 

모델로는 사용자, 트윗 및 팔로어 (HABTM 사용자)가 있습니다. 지금

,이 찾기 쿼리를 가지고 :

내가 원하는 거의 다 인이 SQL 문을 생성
$this->User->bindModel(array('hasOne' => array('UserUsers'))); 
     $fields = array('User.username'); 
     $conditions = array(
      'UserUsers.user_id'=> $current_id); 
     $contain = $this->User->contain(array(
      'UserUsers', 
      'Tweet' => array(
       'fields'=> array('Tweet.content', 'Tweet.date'), 
       'order' => 'Tweet.date DESC', 
       'limit' => 1))); 

     $data = $this->User->find('all', compact('fields', 'conditions', 'contain')); 

:

SELECT `User`.`username`, `User`.`id` FROM `users` AS `User` LEFT JOIN `user_users` AS `UserUsers` ON (`UserUsers`.`user_id` = `User`.`id`) WHERE `UserUsers`.`user_id` = 1 

이 아주 가까이 있지만, 잘못을 반환하는 것 내 테이블의 열. 나는 다음과 SQL 문을 생성하고 싶습니다 :

SELECT `User`.`username`, `User`.`id` FROM `users` AS `User` LEFT JOIN `user_users` AS `UserUsers` ON (`UserUsers`.`follower_user_id` = `User`.`id`) WHERE `UserUsers`.`user_id` = 1 

나의 발견을 조정할하는 방법에 어떤 도움() 쿼리가 크게

을 주시면 감사하겠습니다! 고맙습니다!

+0

당신이 당신의 사용자 모델에서'associationForeignKey '=>'follower_user_id''를 시도 질문 해결? – Ross

+0

예, 내 사용자 모델이 있습니다 \t var에 $의 hasAndBelongsToMany의 = 배열 ​​( '추종자'=> 배열 ( '클래스'=> '추종자', '관절 식'=> 'user_users', '외래 키' => 'user_id', 'associationForeignKey'=> 'follower_user_id' ) ); – kurisukun

답변

1

귀하의 의견은 모두 설명 : (보면 당신은 user_users와 사용자 모델 테이블에 가입 케이크를 말하고있다이와

var $hasAndBelongsToMany = array(
    'Follower' => array( 
     'className' => 'Follower', 
     'joinTable' => 'user_users', 
     'foreignKey' => 'user_id', 
     'associationForeignKey' => 'follower_user_id' 
)); 

user.id = USER_ID로 : D 당신은 당신이 뭔가를 가지고 있다고 말했다 외래 키에서) UserUsers과 같은 조건을 사용하십시오. user_id = 1 Follower.id = follower_user_id를 사용하여 follower 모델 테이블과 user_users 테이블을 결합합니다.

HABTM 또는 hasMany에 대한 조인을 사용하여 SQL 쿼리를 수행하지 않으므로 첫 번째 파트 일뿐입니다. 두 번째 부분을 찾아보십시오. 그래서 당신이 얻는 것은이 찾기에 대한 정상적인 동작이며 다른 부분에 대한 SQL 덤프를 확인하면 무엇을 의미하는지 볼 수 있습니다. D

force join manually을 수행 할 수 있습니다. linkable

희망 같은 행동이

+0

감사합니다! 테이블에 수동 조인을 사용했습니다. :) – kurisukun

관련 문제