2011-07-05 4 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 
     ) 
    )); 

を。データベースには、カテゴリhasMany製品があります。

この問題を解決する最良の方法はありますか? category_idでforeachループでProduct-> findを見つけるのを避けることは可能ですか?

答えて

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

関連する問題