2012-10-09 41 views
0

我有模型:項目=>關鍵字CakePHP根據數組篩選相關模型

使用HMBTM關係(在兩個模型中設置)。

關鍵字表充當一個樹,即。這些關鍵字之間具有層次關係。

我正在使用可容忍的行爲。

用戶選擇關鍵字。

我希望返回的記錄(項目)受所選關鍵字或任何關鍵字的子項限制。我試圖重用我的索引操作..如果沒有選擇關鍵字,則渲染標準索引視圖,如果選擇關鍵字,則查找所有子關鍵字,然後將返回的項目過濾爲具有任何關鍵字標識的項目。

我曾嘗試創建一個兒童(和原始)關鍵字ID的數組,但我無法弄清楚如何讓該數組成爲我的查找動作中的過濾。

我已經嘗試使用:

$this->Project->find('all', 
    array(
     'contain' => array('Keyword.id'=>array($childkeywords))  
    ) 
); 

其中$ childkeywords是相關ID的排列,創建使用array_push。但是,這不使用鍵值對,只是每個ID的int值。所以我認爲它的結構不正確。

我覺得我想要做一些很容易的事情,但是感覺我越來越遠離解決方案。是否沒有一種標準的方法將記錄限制爲相關模型的ID集合?

乾杯

與聖保羅的幫助,我現在有:

$this->Project->find('all', array(
            'fields' => array('id','title','country', 'project_ref'), 
            'type' => array('inner'), 
            'contain' => array('Keyword' => array(
                   'conditions' => array('Keyword.id' => $childkeywords)            
                      ) 
                ) 
              ) 
           ) 

但使用類型內的是不會改變的結果..

回答

0

你應該有這樣的事情:

$this->Project->find('all', array(
    'contain' => array('Keyword' => array(
       'conditions' => array('Keyword.id' => $childkeywords) 
      ) 
    ) 
)); 
+0

Paulo,感謝這真的幫助..我的代碼現在停止崩潰,但是當我調試創建的數組時,它顯示所有項目和匹配搜索ID的項目顯示關聯的關鍵字。我需要的是擺脫沒有任何關聯,匹配關鍵字的項目。 雖然這感覺真的很接近!這感覺就像一個左外和內連接問題 - 不知道如何解決這個問題。 –

+0

我曾嘗試將'type'=>數組('inner')添加到參數列表中,但這並沒有改變。 –

+0

是的,你可以添加''type'=>'inner'',但是應該在'Keyword'模型中添加'$ belongsTo'數組。你試過了嗎? –

0

嘗試這樣:

$this->Project->Keyword->find('all', array(
    'conditions' => array(
     'Keyword.id' => array(1, 2, 3, 4) 
    ) 
)); 

在這種情況下,您不需要使用Containable。您可以嘗試TreeBehavior

+0

嗨Bancer 此解決方案似乎爲每個關鍵字返回一行,是否使用過,如果有關聯的項目,那麼詳細信息存在..再次,不是我所希望的。 我對設置的關鍵字有樹形行爲。不知道如何在這個問題的上下文中使用它.. –

+0

你可以設置'recursive'爲'0'或'-1'來限制檢索相關記錄。將「1,2,3,4」替換爲您需要檢索的關鍵字ID。 – bancer