Commit 5fd5b9ca32ded3f4f684a9d157643a2f5364974e
1 parent
29c20011
big commti
Showing
2 changed files
with
46 additions
and
99 deletions
Show diff stats
common/modules/product/models/Category.php
... | ... | @@ -197,51 +197,53 @@ class Category extends \yii\db\ActiveRecord |
197 | 197 | return true; |
198 | 198 | } |
199 | 199 | public function getActiveFilters() { |
200 | + return Category::getDb()->cache(function(){ | |
201 | + $query1 = (new Query()) | |
202 | + ->distinct() | |
203 | + ->select([ | |
204 | + 'option_id' | |
205 | + ]) | |
206 | + ->from('tax_option') | |
207 | + ->innerJoin('product_variant_option', 'tax_option.tax_option_id = product_variant_option.option_id') | |
208 | + ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id') | |
209 | + ->innerJoin('product_variant', 'product_variant.product_variant_id = product_variant_option.product_variant_id') | |
210 | + ->innerJoin('product', 'product.product_id = product_variant.product_id') | |
211 | + ->innerJoin('product_category', 'product_category.product_id = product.product_id') | |
212 | + ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id') | |
213 | + ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id]) | |
214 | + ->andWhere(['!=', 'product_variant.status', 1]); | |
215 | + | |
216 | + $query2 = (new Query()) | |
217 | + ->distinct() | |
218 | + ->select([ | |
219 | + 'option_id' | |
220 | + ]) | |
221 | + ->from('tax_option') | |
222 | + ->innerJoin('product_option', 'tax_option.tax_option_id = product_option.option_id') | |
223 | + ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id') | |
224 | + ->innerJoin('product', 'product.product_id = product_option.product_id') | |
225 | + ->innerJoin('product_category', 'product_category.product_id = product.product_id') | |
226 | + ->innerJoin('product_variant', 'product_variant.product_id = product.product_id') | |
227 | + ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id') | |
228 | + ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id]) | |
229 | + ->andWhere(['!=', 'product_variant.status', 1]); | |
230 | + $query3 = (new Query()) | |
231 | + ->select([ | |
232 | + 'tax_option.*', | |
233 | + 'tax_group.*', | |
234 | + 'tax_option.alias as option_alias', | |
235 | + 'tax_group.alias as group_alias', | |
236 | + 'tax_option.name as value', | |
237 | + 'tax_option.sort AS tax_option_sort', | |
238 | + 'tax_group.sort AS tax_group_sort', | |
239 | + ]) | |
240 | + ->from(['tax_option' ]) | |
241 | + ->where(['tax_option.tax_option_id'=>$query1->union($query2)]) | |
242 | + ->innerJoin('tax_group','tax_group.tax_group_id = tax_option.tax_group_id') | |
243 | + ->orderBy('tax_option.sort, tax_group.sort'); | |
244 | + return $query3->all(); | |
245 | + }, 3600*24); | |
200 | 246 | |
201 | - $query1 = (new Query()) | |
202 | - ->distinct() | |
203 | - ->select([ | |
204 | - 'option_id' | |
205 | - ]) | |
206 | - ->from('tax_option') | |
207 | - ->innerJoin('product_variant_option', 'tax_option.tax_option_id = product_variant_option.option_id') | |
208 | - ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id') | |
209 | - ->innerJoin('product_variant', 'product_variant.product_variant_id = product_variant_option.product_variant_id') | |
210 | - ->innerJoin('product', 'product.product_id = product_variant.product_id') | |
211 | - ->innerJoin('product_category', 'product_category.product_id = product.product_id') | |
212 | - ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id') | |
213 | - ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id]) | |
214 | - ->andWhere(['!=', 'product_variant.status', 1]); | |
215 | - | |
216 | - $query2 = (new Query()) | |
217 | - ->distinct() | |
218 | - ->select([ | |
219 | - 'option_id' | |
220 | - ]) | |
221 | - ->from('tax_option') | |
222 | - ->innerJoin('product_option', 'tax_option.tax_option_id = product_option.option_id') | |
223 | - ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id') | |
224 | - ->innerJoin('product', 'product.product_id = product_option.product_id') | |
225 | - ->innerJoin('product_category', 'product_category.product_id = product.product_id') | |
226 | - ->innerJoin('product_variant', 'product_variant.product_id = product.product_id') | |
227 | - ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id') | |
228 | - ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id]) | |
229 | - ->andWhere(['!=', 'product_variant.status', 1]); | |
230 | - $query3 = (new Query()) | |
231 | - ->select([ | |
232 | - 'tax_option.*', | |
233 | - 'tax_group.*', | |
234 | - 'tax_option.alias as option_alias', | |
235 | - 'tax_group.alias as group_alias', | |
236 | - 'tax_option.name as value', | |
237 | - 'tax_option.sort AS tax_option_sort', | |
238 | - 'tax_group.sort AS tax_group_sort', | |
239 | - ]) | |
240 | - ->from(['tax_option' ]) | |
241 | - ->where(['tax_option.tax_option_id'=>$query1->union($query2)]) | |
242 | - ->innerJoin('tax_group','tax_group.tax_group_id = tax_option.tax_group_id') | |
243 | - ->orderBy('tax_option.sort, tax_group.sort'); | |
244 | - return $query3->all(); | |
245 | 247 | } |
246 | 248 | |
247 | 249 | public function getTaxGroupsForMenu() | ... | ... |
frontend/models/ProductFrontendSearch.php
... | ... | @@ -104,61 +104,6 @@ class ProductFrontendSearch extends Product { |
104 | 104 | return $query; |
105 | 105 | } |
106 | 106 | |
107 | - public function optionsForCategory($category = null, $params = []) { | |
108 | - $query = TaxOption::find() | |
109 | - ->select([ | |
110 | - TaxOption::tableName() .'.*', | |
111 | - ]) | |
112 | - ->leftJoin(ProductOption::tableName(), ProductOption::tableName() .'.option_id='. TaxOption::tableName() .'.tax_option_id') | |
113 | - ->joinWith('taxGroup') | |
114 | - ->where([TaxGroup::tableName() .'.is_filter' => true]); | |
115 | - | |
116 | - $query->innerJoin('product_variant', 'product_variant.product_id = '. ProductOption::tableName() .'.product_id'); | |
117 | - $query->andWhere(['!=', 'product_variant.status', 1]); | |
118 | - $query->groupBy(TaxOption::tableName() .'.tax_option_id'); | |
119 | -// $query->having(['>', 'COUNT(product_variant.product_variant_id)', 0]); | |
120 | - | |
121 | - if (!empty($category)) { | |
122 | - $query->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. ProductOption::tableName() .'.product_id'); | |
123 | - $query->andWhere([ProductCategory::tableName() .'.category_id' => $category->category_id]); | |
124 | - } | |
125 | - | |
126 | - $query->orderBy(TaxOption::tableName() .'.sort', SORT_ASC); | |
127 | - $query->limit(null); | |
128 | - | |
129 | -// $queryCount = ProductOption::find() | |
130 | -// ->select(['COUNT('. ProductOption::tableName() .'.product_id)']) | |
131 | -// ->where(ProductOption::tableName() .'.option_id = '. TaxOption::tableName() .'.tax_option_id'); | |
132 | -// $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'); | |
133 | -// if (!empty($category)) { | |
134 | -// $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'); | |
135 | -// } | |
136 | -// if (!empty($params['options'])) { | |
137 | -// $queryCount->innerJoin('tax_option', 'tax_option.tax_option_id = product_option.option_id'); | |
138 | -// $queryCount->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id'); | |
139 | -// foreach ($params['options'] as $group => $options) { | |
140 | -// $queryCount->andWhere([ | |
141 | -// 'tax_group.alias' => $group, | |
142 | -// 'tax_option.alias' => $options | |
143 | -// ]); | |
144 | -// } | |
145 | -// } | |
146 | -// if (!empty($params['brands'])) { | |
147 | -// $queryCount->innerJoin(Product::tableName(), 'product.product_id='. ProductOption::tableName() .'.product_id'); | |
148 | -// $queryCount->andWhere(['product.brand_id' => $params['brands']]); | |
149 | -// } | |
150 | -// if (!empty($params['prices'])) { | |
151 | -// if ($params['prices']['min'] > 0) { | |
152 | -// $queryCount->andWhere(['>=', 'pv.price', $params['prices']['min']]); | |
153 | -// } | |
154 | -// if ($params['prices']['max'] > 0) { | |
155 | -// $queryCount->andWhere(['<=', 'pv.price', $params['prices']['max']]); | |
156 | -// } | |
157 | -// } | |
158 | -// $query->addSelect(['_items_count' => $queryCount]); | |
159 | - | |
160 | - return $query; | |
161 | - } | |
162 | 107 | |
163 | 108 | public function priceLimits($category = null, $params = []) { |
164 | 109 | if (!empty($category)) { | ... | ... |