2011-10-04 69 views
1

我是新來的蛋糕,我正在用類似twitter的克隆進行練習。在這一點上,我有3個表:CakePHP找到涉及兩個模型的sql查詢語句

users (id, name)

  • ID爲用戶自動生成的ID

tweets (id, content, user_id)

  • id是自動生成的ID
  • con帳篷鳴叫的文本
  • user_ID的是,發的帖子

followers (id, follower_id, following_id)

  • id是自動生成的ID
  • follower_id用戶的ID誰是用戶進行以下操作
  • following_id是正在使用的用戶

所以,作爲新SQL作爲好,我試圖測試對我的一些數據庫的SQL查詢與此聲明:

SELECT * FROM tweets 
WHERE user_id IN 
(SELECT following_id FROM followers WHERE follower_id = 1) <--- this 1 is just a magic number to test out the query 

在此查詢中,我試圖找到正在對這些用戶的所有微博其次是用戶(ID爲1)

我的問題有兩方面。對於我的生活,我無法找到如何在蛋糕中進行相同的查找查詢。其次,我的sql查詢涉及查看兩個表,實際上,超過兩個cakephp模型。我不知道如何使用一個控制器的兩個模型來構造這個查找查詢。

+0

http://book.cakephp.org/view/1030/Complex-Find-Conditions 尋子查詢部分 – Ehtesham

+0

謝謝你,但我仍然覺得很難理解。另外,使用查找子查詢可以對結果進行分頁嗎? – kurisukun

回答

0
$conditionsSubQuery['`followers`.`follower_id `'] = 1; 
$dbo = $this->Follower->getDataSource(); 

$subQuery = $dbo->buildStatement( 
    array(  
     'fields' => array('`followers`.`following_id`'), 
      'table' => $dbo->fullTableName($this->Follower), 
      'alias' => 'followers', 
      'limit' => null, 
      'offset' => null, 
      'joins' => array(), 
      'conditions' => $conditionsSubQuery, 
      'order' => null, 
      'group' => null ), 

     $this->Follower); 



    $subQuery = ' `tweets`.`user_id` IN (' . $subQuery . ') '; 

    $subQueryExpression = $dbo->expression($subQuery); 

    $conditions[] = $subQueryExpression; 

    $this->Tweet->find('all', compact('conditions')); 
+0

謝謝!我試過這個,但是我得到了這個錯誤: SQL錯誤:1054:'IN/ALL/ANY子查詢中的未知列'tweets.user_id' 我驗證了那些是正確的數據庫和表名。會有另一個原因,爲什麼會出現這種情況? – kurisukun

+0

我使用下面的代碼修復了這個問題: $ subQuery ='user_id' IN('。$ subQuery。')'; 謝謝! – kurisukun