]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
fix: фильтрация категорий Букет/Сборка/Сервис после кэша
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 22 Apr 2026 07:46:39 +0000 (10:46 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 22 Apr 2026 07:46:39 +0000 (10:46 +0300)
Перенесена фильтрация исключённых категорий из SQL-запроса внутри кэша
в PHP-фильтр после getOrSet — работает немедленно независимо от состояния кэша.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
erp24/services/ProductMappingService.php

index 42eabbd53e7541a76600b44392b6e7920ae3f388..a63f5300ad60628cd5c5f428a7059f0a9b2732c9 100644 (file)
@@ -134,15 +134,14 @@ class ProductMappingService
      */
     public function getCascadeFilters(?string $category = null, ?string $subcategory = null): array
     {
-        $cacheKey = 'pm_cascade_filters_v2_' . md5((string)$category . '|' . (string)$subcategory);
+        $cacheKey = 'pm_cascade_filters_' . md5((string)$category . '|' . (string)$subcategory);
 
-        return Yii::$app->cache->getOrSet($cacheKey, function () use ($category, $subcategory) {
+        $data = Yii::$app->cache->getOrSet($cacheKey, function () use ($category, $subcategory) {
             $categories = (new Query())
                 ->select('category')
                 ->from('products_1c_nomenclature')
                 ->where(['IS NOT', 'category', null])
                 ->andWhere(['!=', 'category', ''])
-                ->andWhere(['not in', 'category', self::EXCLUDED_CATEGORIES])
                 ->distinct()
                 ->orderBy('category')
                 ->column();
@@ -175,6 +174,14 @@ class ProductMappingService
 
             return compact('categories', 'subcategories', 'species');
         }, self::CACHE_DURATION);
+
+        // Фильтруем исключённые категории уже после кэша — работает даже с устаревшим кэшем
+        $data['categories'] = array_values(array_filter(
+            $data['categories'],
+            static fn(string $cat): bool => !in_array($cat, self::EXCLUDED_CATEGORIES, true)
+        ));
+
+        return $data;
     }
 
     /**