2011-04-22 73 views
2

這很簡單,但我想我以前從來沒碰過它。我有一個Page型號,即hasMany Comment。我想抽出至少有1條評論的所有網頁,但是不要刪除任何網頁。當我看着它時,我意識到我不知道該怎麼做。我想我可以使用ad hoc連接,但我寧願使用Containable,如果可能的話。我試過在Comment條件下測試not null以及其他一些不太可能工作的東西,但看起來這應該是可能的。只能檢索至少有一個關聯的記錄

當然,我現在得到的是所有頁面,其中一些頁面記錄有一個空的Comment成員。如果我可以這麼做,不妨繞過所有額外的東西來跳過。

find電話:

$pages = $this->Folder->Page->find(
     'all', 
     array(
     'contain' => array(
      'Comment' => array(
      'order' => array('Comment.modified DESC'), 
     ), 
      'Folder' => array(
      'fields' => array('Folder.id'), 
     ), 
     ), 
     'conditions' => array(
      'Folder.group_id' => $id, 
     ), 
    ) 
    ); 

感謝。

回答

3

你比特設幾種方法可供其他加入:

  1. 進行非標準化數據集,並添加has_comment標誌到您的網頁表格。根據您的條件添加'Page.has_comment' => 1
  2. 使用DISTINCT page_id針對評論運行您的查詢。

    $comments = $this->Folder->Page->Comment->find('all', array(
        'conditions' => array('DISTINCT Comment.page_id' 
        'contain' => array(
         'Page' => array(
           'Folder' 
         ) 
        ) 
    ); 
    
  3. 首先從註釋表中獲取一組不同的頁面id。

    $page_ids = $this->Folder->Page->Comment->find('list', array(
        'fields' => array('id', 'page_id'), 
        'conditions' => array('DISTINCT Comment.page_id'), 
    ); 
    $pages = $this->Folder->Page->find('all', array(
        'conditions' => array('Page.id' => $page_ids), 
        'contain' => array(
         ... 
        ) 
    ); 
    
+0

好建議,我有第三個選項去。 – 472084 2012-06-29 14:31:12

相關問題