2011-07-05 67 views
1

我正在使用CakePHP的樹狀行爲,因爲我不想查看空類別,所以需要知道類別中是否有任何產品或它的子類別。如何僅顯示具有CakePHP行爲樹的產品類別?

我願做這樣的事情:

$cat = $this->Category->find('first',array('conditions'=>array('id'=>$id))); 
    $test = $this->Category->find('threaded', array(
     'conditions' => array(
      'Category.lft >=' => $cat['Category']['lft'], 
      'Category.rght <=' => $cat['Category']['rght'], 
      'Product.InStock >'=>0 //NOT WORKING 
     ) 
    )); 

這將是一個起點來取消不需要的陣列的尺寸。在數據庫中,類別有許多產品。

有什麼可以解決這個問題的最佳方法?是否有可能避免Product->在foreach循環中找到category_id?

回答

1

未經測試

$this->Category->Behaviors->attach->('Containable'); 

$cat = $this->Category->find('first',array('conditions'=>array('id'=>$id))); 

    $test = $this->Category->find('threaded', array(
     'conditions' => array(
      'Category.lft >=' => $cat['Category']['lft'], 
      'Category.rght <=' => $cat['Category']['rght']), 
     // use containable behaviour and apply the condition 
     'contain'=>array('Product'=>array('conditions'=> 
              array('Product.InStock >'=> 0) 
            ) 
         ) 
     )); 
+0

是它的工作原理,謝謝!現在我只需要擺脫所有沒有產品類別的「死衚衕」。也許多個foreach結構或什麼? – Henri

+0

我在答案中忘記提到了,但如果您擁有數千種產品,那麼這種查詢和性能可能會很容易失控。你會想要監視它並看看它是如何發生的。可能值得使用'contain'數組中的'fields'數組,並且只從'Product'中選擇需要的字段並限制它/使用分頁。 – Ross

+0

謝謝,我一直盯着它。加載時間現在大約爲0.25秒,並且它不是很高的流量站點,所以它並不重要。 – Henri

相關問題