1
으로 필터링 나는 YII 등 제품, 카테고리와 프로젝트 .. 내가 범주의 목록, 제품을 필터링하기 위해 노력하고있어YII 범위 - 관련 모델
, 그래서 나는 모든을 좀하고 싶습니다 일부 카테고리의 제품.
...
'categories' => array(self::MANY_MANY, 'ProductCategory', 'product_product_category(product_id, category_id)'),
...
내 제품 모델은 다음과 같은 명명 된 범위를 가지고 :
public function category($categoryWid){
$category = ProductCategory::model()->findByWid($categoryWid); // wid is a custom id
$all = $category->children_ids;
$this->getDbCriteria()->mergeWith(array(
'with'=>array(
'categories'=>array(
'condition' => "categories.id IN ($all)"
)),
));
return $this;
}
나는 다음과 같은 방법이 범위를 호출 할 때 :
제품 모델은 분류 모델에 관계가
Product::model()->category($categoryWid)->count();
다음 SQL을 생성합니다.
SELECT
COUNT(DISTINCT `t`.`id`)
FROM `product` `t`
LEFT OUTER JOIN `product_product_category` `categories_categories`
ON (`t`.`id`=`categories_categories`.`product_id`)
LEFT OUTER JOIN `product_category` `categories`
ON (`categories`.`id`=`categories_categories`.`category_id`)
WHERE (status = 2) AND (categories.id IN (21,23,22,24,25))
내 문제는 이중 조인입니다. 그래서 with
메서드를 가진 두 번째 JOIN을 추가합니다.
관계 기반 JOIN 만 사용하고 필터링을 수행하려면 어떤 범위를 변경해야합니까?
찬성 투표를 솔루션을 자신을 발견하고, 게시. – crafter