2011-10-11 58 views
0

我一直在用find()查詢摔跤一段時間。有關表格的參考,請參閱此處的問題:CakePHP Twitter-clone: Can't get follow-system to workCakePHP在HABTM關係中的查找查詢中返回錯誤的列

但是,簡而言之,這是一個我爲自學而做的推特克隆。我有三張桌子。

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

作爲模型,我有用戶,推文和關注者(HABTM用戶)。

現在,我有這樣的查找查詢:

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

將會產生這條SQL語句,這幾乎是我想要的:

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 

任何幫助如何調整我的find()查詢將不勝感激!謝謝!

+0

您是否嘗試過在你的用戶模型'「associationForeignKey」 =>「follower_user_id''? – Ross

+0

是的,我的用戶模型具有這樣的: \t變量$ hasAndBelongsToMany =陣列( '跟隨'=>陣列( '的className'=> '跟隨者', 'joinTable'=> 'USER_USERS', '外鍵' =>'user_id', 'associationForeignKey'=>'follower_user_id' ) ); – kurisukun

回答

1

您的評論可以解釋這一切:d 你說,你有這樣的事情:

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

這樣,你就告訴蛋糕加盟與USER_USERS用戶模型表格由user.id = USER_ID(看在外鍵)使用您的條件,如UserUsersuser_id = 1那麼它會加入user_users表跟隨者模型表使用Follower.id = follower_user_id

蛋糕不會做一個SQL查詢與HABTM或hasMany的聯接,所以你發佈的只是第一部分,你應該看看第二部分。所以你得到的是這個發現的正常行爲,沒有什麼錯,它檢查你的SQL轉儲的其他部分,你會明白我的意思:D

你可以做force join manually,或嘗試做一個像linkable

希望這種行爲上的解決你的問題

+0

謝謝!我在表格上使用了手動連接,這些連接起作用了! :) – kurisukun