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

합니다. 데이터베이스에는 범주에 많은 제품이 있습니다.

이 문제의 해결 방법은 무엇입니까? 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-structures 또는 무엇일까요? – Henri

+0

내 대답은 언급하는 것을 잊어 버렸지 만, 수천 가지 제품이 있다면 그러한 종류의 쿼리와 성능이 매우 쉽게 제어 할 수 있습니다. 당신은 그것을 모니터하고 그것이 어떻게되는지 보길 원할 것입니다. 아마'contain' 배열 내에서'fields' 배열을 사용하고'Product'에서 필요한 필드만을 선택하고 그것을 제한하거나 페이지 매김을 사용하여 가치가있을 것입니다. – Ross

+0

고마워, 나는 계속 주저한다. 로드 시간은 이제 약 0.25 초이고 트래픽 사이트가 너무 높지 않으므로 아직 중요하지 않습니다. – Henri

관련 문제