diff --git a/common/modules/product/models/Category.php b/common/modules/product/models/Category.php index a5c53a4..0927402 100755 --- a/common/modules/product/models/Category.php +++ b/common/modules/product/models/Category.php @@ -197,51 +197,53 @@ class Category extends \yii\db\ActiveRecord return true; } public function getActiveFilters() { + return Category::getDb()->cache(function(){ + $query1 = (new Query()) + ->distinct() + ->select([ + 'option_id' + ]) + ->from('tax_option') + ->innerJoin('product_variant_option', 'tax_option.tax_option_id = product_variant_option.option_id') + ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id') + ->innerJoin('product_variant', 'product_variant.product_variant_id = product_variant_option.product_variant_id') + ->innerJoin('product', 'product.product_id = product_variant.product_id') + ->innerJoin('product_category', 'product_category.product_id = product.product_id') + ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id') + ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id]) + ->andWhere(['!=', 'product_variant.status', 1]); + + $query2 = (new Query()) + ->distinct() + ->select([ + 'option_id' + ]) + ->from('tax_option') + ->innerJoin('product_option', 'tax_option.tax_option_id = product_option.option_id') + ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id') + ->innerJoin('product', 'product.product_id = product_option.product_id') + ->innerJoin('product_category', 'product_category.product_id = product.product_id') + ->innerJoin('product_variant', 'product_variant.product_id = product.product_id') + ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id') + ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id]) + ->andWhere(['!=', 'product_variant.status', 1]); + $query3 = (new Query()) + ->select([ + 'tax_option.*', + 'tax_group.*', + 'tax_option.alias as option_alias', + 'tax_group.alias as group_alias', + 'tax_option.name as value', + 'tax_option.sort AS tax_option_sort', + 'tax_group.sort AS tax_group_sort', + ]) + ->from(['tax_option' ]) + ->where(['tax_option.tax_option_id'=>$query1->union($query2)]) + ->innerJoin('tax_group','tax_group.tax_group_id = tax_option.tax_group_id') + ->orderBy('tax_option.sort, tax_group.sort'); + return $query3->all(); + }, 3600*24); - $query1 = (new Query()) - ->distinct() - ->select([ - 'option_id' - ]) - ->from('tax_option') - ->innerJoin('product_variant_option', 'tax_option.tax_option_id = product_variant_option.option_id') - ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id') - ->innerJoin('product_variant', 'product_variant.product_variant_id = product_variant_option.product_variant_id') - ->innerJoin('product', 'product.product_id = product_variant.product_id') - ->innerJoin('product_category', 'product_category.product_id = product.product_id') - ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id') - ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id]) - ->andWhere(['!=', 'product_variant.status', 1]); - - $query2 = (new Query()) - ->distinct() - ->select([ - 'option_id' - ]) - ->from('tax_option') - ->innerJoin('product_option', 'tax_option.tax_option_id = product_option.option_id') - ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id') - ->innerJoin('product', 'product.product_id = product_option.product_id') - ->innerJoin('product_category', 'product_category.product_id = product.product_id') - ->innerJoin('product_variant', 'product_variant.product_id = product.product_id') - ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id') - ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id]) - ->andWhere(['!=', 'product_variant.status', 1]); - $query3 = (new Query()) - ->select([ - 'tax_option.*', - 'tax_group.*', - 'tax_option.alias as option_alias', - 'tax_group.alias as group_alias', - 'tax_option.name as value', - 'tax_option.sort AS tax_option_sort', - 'tax_group.sort AS tax_group_sort', - ]) - ->from(['tax_option' ]) - ->where(['tax_option.tax_option_id'=>$query1->union($query2)]) - ->innerJoin('tax_group','tax_group.tax_group_id = tax_option.tax_group_id') - ->orderBy('tax_option.sort, tax_group.sort'); - return $query3->all(); } public function getTaxGroupsForMenu() diff --git a/frontend/models/ProductFrontendSearch.php b/frontend/models/ProductFrontendSearch.php index 8655497..6f56087 100755 --- a/frontend/models/ProductFrontendSearch.php +++ b/frontend/models/ProductFrontendSearch.php @@ -104,61 +104,6 @@ class ProductFrontendSearch extends Product { return $query; } - public function optionsForCategory($category = null, $params = []) { - $query = TaxOption::find() - ->select([ - TaxOption::tableName() .'.*', - ]) - ->leftJoin(ProductOption::tableName(), ProductOption::tableName() .'.option_id='. TaxOption::tableName() .'.tax_option_id') - ->joinWith('taxGroup') - ->where([TaxGroup::tableName() .'.is_filter' => true]); - - $query->innerJoin('product_variant', 'product_variant.product_id = '. ProductOption::tableName() .'.product_id'); - $query->andWhere(['!=', 'product_variant.status', 1]); - $query->groupBy(TaxOption::tableName() .'.tax_option_id'); -// $query->having(['>', 'COUNT(product_variant.product_variant_id)', 0]); - - if (!empty($category)) { - $query->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. ProductOption::tableName() .'.product_id'); - $query->andWhere([ProductCategory::tableName() .'.category_id' => $category->category_id]); - } - - $query->orderBy(TaxOption::tableName() .'.sort', SORT_ASC); - $query->limit(null); - -// $queryCount = ProductOption::find() -// ->select(['COUNT('. ProductOption::tableName() .'.product_id)']) -// ->where(ProductOption::tableName() .'.option_id = '. TaxOption::tableName() .'.tax_option_id'); -// $queryCount->andWhere('(SELECT COUNT(pv.product_variant_id) FROM "product_variant" "pv" WHERE pv.stock != 0 AND pv.product_id = '. ProductOption::tableName() .'.product_id) > 0'); -// if (!empty($category)) { -// $queryCount->andWhere('(SELECT COUNT(pc.product_id) FROM product_category pc WHERE pc.product_id = '. ProductOption::tableName() .'.product_id AND pc.category_id = '. $category->category_id .') > 0'); -// } -// if (!empty($params['options'])) { -// $queryCount->innerJoin('tax_option', 'tax_option.tax_option_id = product_option.option_id'); -// $queryCount->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id'); -// foreach ($params['options'] as $group => $options) { -// $queryCount->andWhere([ -// 'tax_group.alias' => $group, -// 'tax_option.alias' => $options -// ]); -// } -// } -// if (!empty($params['brands'])) { -// $queryCount->innerJoin(Product::tableName(), 'product.product_id='. ProductOption::tableName() .'.product_id'); -// $queryCount->andWhere(['product.brand_id' => $params['brands']]); -// } -// if (!empty($params['prices'])) { -// if ($params['prices']['min'] > 0) { -// $queryCount->andWhere(['>=', 'pv.price', $params['prices']['min']]); -// } -// if ($params['prices']['max'] > 0) { -// $queryCount->andWhere(['<=', 'pv.price', $params['prices']['max']]); -// } -// } -// $query->addSelect(['_items_count' => $queryCount]); - - return $query; - } public function priceLimits($category = null, $params = []) { if (!empty($category)) { -- libgit2 0.21.4