2012-02-09 53 views
1

我有兩個表主題和帖子。關係:主題hasmany帖子。在這兩個表中,都有一個狀態字段(Y,N)來緩和內容。在我的頁面中,我想列出至少一個帖子狀態爲N或主題狀態本身爲N的所有未主持主題。是否可以在cakephp2.0中使用find功能。我使用可包含的行爲。Cakephp複雜查找條件與計數子表

我也需要應用分頁。

回答

1

這是一個解決辦法:

  1. 搜索上的帖子模型(帖子附有N狀態)或(帖子女子屬於N狀態的帖子) a第二存儲topic_id
  2. 現在的主題模型ID搜索議題清單上

事情是這樣的:既然你的文章模型seaching

# TopicsController.php 

$ids = $this->Topic->Post->find('list', array(
    'fields' => array('Post.topic_id') 
    'conditions' => array(
     'OR' => array(
      'Post.status' => 'N', 
      'Topic.status' => 'N', 
     ) 
    ) 
)); 

$this->paginate = array(
    'conditions' => array('Topic.id' => (array)$ids), 
    'order' => array('Topic.created' => 'DESC') 
); 

$topics = $this->paginate('Topic'); 

,CakePHP將加入父主題數據,並且可以按兩種狀態進行過濾。 :)

+0

謝謝..但我需要應用分頁。因此,每次我需要獲取所有ID號列表 – binoy 2012-02-10 06:06:24

+1

@binoy時,我已更新..現在它對數據進行分頁。您需要在分頁之前搜索所有ID,因爲您的分頁不是基於直接查詢。您幾乎在此處有子查詢 – 2012-02-10 06:15:07

1

如果我理解正確,你可以使用:

$conditions => array ('OR' => array ('Topic.status' => 'N', 'Post.status' => 'N')); 
+0

感謝您的答覆。我會解釋。我只需要列出主題。例如: - 如果topic1有兩個帖子postA和postB,並且postA狀態是N,我想列出topic1。另外,如果有topic2沒有帖子和狀態爲N,我想也列出 – binoy 2012-02-09 14:11:10

1

嗯,我沒有測試,但下面應該工作

$this->recursive = -1;  //necessary to use joins 

    $options['joins'] = array(
    'table' => 'posts', 
    'alias' => 'Post', 
    'type' => 'left', 
    'conditions' => array('Topic.id = Post.topic_id', 'Post.status = N') //updated code 
    ); 
    $options['group'] = array('Topic.id HAVING count('Topic.id') >= 1 OR Topic.status = N'); 
    $this->Topic->find('all', $options); 
+0

謝謝..似乎並沒有在cakephp2.x中工作。顯示查詢結果爲SELECT'Topic'.'id','Topic'.'user_id','Topic'.'title','Topic'.'''''''Topic'.'source','Topic'.'status ',FROM'topics' AS'Topic' posts Post LEFT Array WHERE 1 = 1 GROUP BY'Topic'.'id' HAVING count('Post'.'id')> = 1 OR'Topic'.'status' = 'N' – binoy 2012-02-09 15:50:00

+0

我給出 $ this-> Topic-> find('all',array( 'joins'=> array( 'table'=>'posts', 'alias'=>'Post' , '類型'=> '左', '條件'=>數組( 'Topic.id = Post.topic_id AND Post.status = 'N' ) ) '基團'=>數組(' Topic.id HAVING count(Post.id)> = 1 OR Topic.status ='N' )))); – binoy 2012-02-09 15:52:03

+0

我已更新帖子。看看它是否有幫助。 – Ehtesham 2012-02-09 16:00:30