/** * @param StoreCategory $category * @return Attribute[] */ public function getForCategory(StoreCategory $category) { $criteria = new CDbCriteria(['condition' => 't.is_filter = 1 AND t.type != :type', 'params' => [':type' => Attribute::TYPE_TEXT], 'join' => 'LEFT JOIN {{store_type_attribute}} ON t.id = {{store_type_attribute}}.attribute_id LEFT JOIN {{store_type}} ON {{store_type_attribute}}.type_id = {{store_type}}.id LEFT JOIN {{store_product}} AS products ON products.type_id = {{store_type}}.id', 'distinct' => true]); $categories = $category->getChildsArray(); if (!empty($categories)) { $categoriesCriteria = new CDbCriteria(['condition' => 'products.category_id = :category', 'params' => [':category' => $category->id]]); $categoriesCriteria->addInCondition('products.category_id', $categories, 'OR'); $criteria->mergeWith($categoriesCriteria, 'AND'); } else { $criteria->addCondition('products.category_id = :category'); $criteria->params[':category'] = $category->id; } return Attribute::model()->findAll($criteria); }
/** * @param StoreCategory $category * @param bool $withChild * @param null $limit * @return CActiveDataProvider */ public function getListForCategory(StoreCategory $category, $withChild = true, $limit = null) { $categories = []; if (true === $withChild) { $categories = $category->getChildsArray(); } $categories[] = $category->id; $criteria = new CDbCriteria(['scopes' => ['published']]); $builder = new CDbCommandBuilder(Yii::app()->getDb()->getSchema()); $criteria->addInCondition('t.category_id', array_unique($categories)); $criteria->addCondition(sprintf('t.id IN (SELECT product_id FROM {{store_product_category}} WHERE %s)', $builder->createInCondition('{{store_product_category}}', 'category_id', $categories)), 'OR'); $pagination = ['pageSize' => (int) Yii::app()->getModule('store')->itemsPerPage, 'pageVar' => 'page']; if ($limit) { $pagination = false; $criteria->limit = (int) $limit; } return new CActiveDataProvider(Product::model(), ['criteria' => $criteria, 'pagination' => $pagination, 'sort' => ['sortVar' => 'sort', 'defaultOrder' => 't.position']]); }
/** * @param StoreCategory $category * @param integer $limit * @return CActiveDataProvider */ public function getListForCategory(StoreCategory $category, $limit = null) { $categories = $category->getChildsArray(); $categories[] = $category->id; $criteria = new CDbCriteria(); $criteria->select = 't.*'; $criteria->with = ['categoryRelation' => ['together' => true]]; $criteria->addInCondition('categoryRelation.category_id', $categories); $criteria->addInCondition('t.category_id', $categories, 'OR'); $criteria->group = 't.id'; $criteria->scopes = ['published']; if ($limit) { $criteria->limit = $limit; } return new CActiveDataProvider(Product::model(), ['criteria' => $criteria, 'pagination' => ['pageSize' => (int) Yii::app()->getModule('store')->itemsPerPage, 'pageVar' => 'page'], 'sort' => ['sortVar' => 'sort', 'defaultOrder' => 't.position']]); }