Проблема с фильтром коллекций Исправлено

1

Если делать объединение с таблицей shop_product_stocks то выдает ошибку: Query Error 1054: Unknown column 'ps1.id' in 'field list'

Query: SELECT p.*,p.id,GROUP_CONCAT(DISTINCT ps1.id) AS sku_ids FROM shop_product p JOIN shop_product_stocks ps1 ON p.id = ps1.product_id JOIN shop_category_products cp1 ON p.id = cp1.product_id WHERE ps1.stock_id = '5' AND p.status = 1 AND cp1.category_id = 348 GROUP BY p.id ORDER BY cp1.sort ASC LIMIT 30

Соответственно в классе /wa-apps/shop/lib/classes/shopProductsCollection.class.php в методе addJoin либо добавить возможность задавать собственный alias для таблицы, либо поправить, что бы эта таблица не попадала под условия добавления GROUP_CONCAT(DISTINCT ps1.id)

$collection->addJoin(array(
   'type'  => '',
   'table' => 'shop_product_stocks',
   'on' => "p.id = :table.product_id and :table.stock_id = '5'",
   'where' => ":table.count > 0",
));

8 комментариев

  • 0
    Михаил Ушенин Михаил Ушенин 26 июня 2019 11:13 #

    В последнем обновлении мы добавили alias в метод addJoin(). Посмотрите, достаточно ли это для решения вашей задачи.

    • +1
      Протонин Дмитрий Протонин Дмитрий 29 сентября 2022 17:37 #

      Можем собственно продолжить обсуждение и здесь. К тому же, условие не работает на кол-во товаров, тоже непонятно по какой причине, пример того:

      $collection->addWhere('count > 0');
      // Данная вещь с количеством просто не отрабатывает, проверил на некоторых полях продуктов, всё остальное «Вроде бы работает»
      • +1
        Михаил Ушенин Михаил Ушенин 22 апреля 2025 11:18 #

        Мы выпустили обновление Shop-Script, в котором исправили дополнительную фильтрацию товаров плагинами с помощью метода shopProductsCollection->addWhere() в результатах поиска. Обновление можно установить в «Инсталлере».

        Проверьте, пожалуйста. Сообщите нам, если проблема сохранилась.

        Спасибо вам за то, что помогаете улучшать программные продукты Webasyst!

      • +1
        Протонин Дмитрий Протонин Дмитрий 3 октября 2022 12:02 #

        Я так понимаю, ответ придётся ждать долго ? )

      • +1
        Протонин Дмитрий Протонин Дмитрий 3 октября 2022 13:05 #

        Данная вещь также не работает! Прошу разработчиков исправить данные нюансы.. По цене нормально отбирает и всё ок. А с наличием беда! Основной метод нашёл в файле shopProductsCollection.class.php


        • +1
          Михаил Ушенин Михаил Ушенин 3 октября 2022 16:57 #

          Поясните подробнее, на что надо обратить внимание в этом комментарии.

          • +1
            Протонин Дмитрий Протонин Дмитрий 3 октября 2022 17:13 #

            'in_stock_only' -> этот параметр я могу явно пробросить с заданным булевым значением для работы с коллекцией продуктов (shopProductsCollection.class.php -> метод (filters() ). При включённом параметре он никак не реагирует и не учитывает только те, которые есть на складе, хотя должен. Поэтому в итоге, отрабатывает только параметр 'price_min'. В данном случае, должно учитывать то, что в коллекция продуктов должна отдавать продукты только в наличии и не менее данного минимального прайса. Надеюсь, что объяснил нормально.. Если вдруг чего - то не поняли, то я с радостью объясню ещё раз в другой формулировке.

            Абсолютно такая же ситуация и с этим методом. Я бы хотел отобрать только те товары, которые есть, относительно моего фильтра. НО даже при таком решении это не работает, хотя к остальным полям продукта «Достучаться» можно.

            Буду очень благодарен, если проблема решится!

            $collection->addWhere('count > 0'); - не работает
          • +1
            Протонин Дмитрий Протонин Дмитрий 29 сентября 2022 12:16 #

            Либо я чего - то не понял. Либо ошибка по прежнему осталась. По прежнему ругается на условие в котором используется alias таблицы с несуществующей колонкой

            Добавление новых комментариев к этой теме отключено.