Как собрать коллекцию продуктов без использования HASH? Есть решение

Привидите пожалуйста пример, как корректно по SQL запросу собрать коллекцию, без использования hash?

4 ответа

  • 3
    Eugen Nichikov 7 сентября 2017 21:06 # Решение

    А чего бы не воспользоваться кастомной коллекцией через плагин?

    Для примера почти то же, только выводит товары по тегам оригинальных ID товаров.

    public function productsCollection(&$params)
    {
        /**
         * @var shopProductsCollection $collection
         */
        $collection = $params['collection'];
    
        if($collection instanceof shopProductsCollection) {
            $hash = $collection->getHash();
            if (count($hash) == 2 && $hash[0] == 'tagnav') {
    
                $pids = array_filter(explode(',', $hash[1]), 'is_numeric');
    
                if (!$pids) {
                    $collection->addWhere('0');
                    return true;
                }
    
                $product_tags_model = new shopProductTagsModel();
                $tag_ids = $product_tags_model
                    ->select('DISTINCT tag_id')
                    ->where('product_id IN(?)', array($pids))
                    ->fetchAll(null, true);
    
                if ($tag_ids) {
                    $tag_ids = implode(',', $tag_ids);
                    $collection->addJoin('shop_product_tags', 'p.id = :table.product_id', ':table.tag_id IN (' . $tag_ids . ')');
                    $collection->addWhere('p.id NOT IN('.implode(',',$pids).')');
    
    
                    return true;
                } else {
                    $collection->addWhere('0');
                    return true;
                }
            }
        }
        return false;
    }

    Использовать new shopProductsCollection('tagnav/1,2,3') или {$wa->shop->products('tagnav/1,2,3')}

    • +1
      Minya Jam Minya Jam 7 сентября 2017 21:30 #

      Получилось. Спасибо за пример. Действительно, лучше таким образом реализовать.

  • 2
    Minya Jam 7 сентября 2017 19:36 #

    Оказалось все просто, если hash пустой, то ожидаются конструкции SQL запроса.

    $products = new shopProductsCollection();

    $products->addJoin($table, $on = null, $where = null)

    и любые другие условия,

    затем можно применить фильтры $products->filters($data)

    И сборка-вывод $this->setCollection($products)

  • 1
    Алексей Webasyst 7 сентября 2017 17:51 #

    Слишком общий вопрос.

    $model = new waModel();
    $data = $model->query("SELECT * FROM shop_product WHERE 1")->fetchAll();
    wa_print_r($data);
    
  • 1
    Михаил Ушенин Webasyst 7 сентября 2017 18:06 #
    без использования hash

    Отчего такое ограничение?

    • +1
      Minya Jam Minya Jam 7 сентября 2017 19:23 #

      Мне нужно было найти товар по SKU, затем выбрать все продукты по тегам в нем и все это поместить в коллекцию, с применением filters и setCollection метода. Разобрался, просто для меня не очень понятно, что происходит, если конструктору класса shopProductsCollection передать пустой hash.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите