@WebforSelf

Как добавить в функцию поиска «поиск по iD товара»?

Друзья, есть функция которая отвечает за поиск по названию и артикулу, как добавить поиск по id товара?

public function productsAutocomplete($q, $limit = null)
    {
        $limit = $limit !== null ? $limit : $this->limit;

        $product_model = new shopProductModel();
        $q = $product_model->escape($q, 'like');
        $fields = 'id, name AS value, price, count, sku_id';

        $products = $product_model->select($fields)
                                  ->where("name LIKE '$q%'")
                                  ->limit($limit)
                                  ->fetchAll('id');
        $count = count($products);

        if ($count < $limit) {
            $product_skus_model = new shopProductSkusModel();
            $product_ids = $product_skus_model
                ->select('id, product_id')
                ->where("(sku LIKE '$q%' OR name LIKE '$q%')")
                ->limit($limit)
                ->fetchAll('product_id');
            $product_ids = array_keys($product_ids);
            if ($product_ids) {
                $data = $product_model->select($fields)
                                      ->where('id IN ('.implode(',', $product_ids).')')
                                      ->limit($limit - $count)
                                      ->fetchAll('id');

                // not array_merge, because it makes first reset numeric keys and then make merge
                $products = $products + $data;
            }
        }

        // try find with LIKE %query%
        if (count($products) < $limit) {
            $data = $product_model
                ->select($fields)
                ->where("name LIKE '%$q%'")
                ->limit($limit)
                ->fetchAll('id');

            // not array_merge, because it makes first reset numeric keys and then make merge
            $products = $products + $data;
        }
        $config = wa('shop')->getConfig();
        /**
         * @var shopConfig $config
         */
        $currency = $config->getCurrency();
        foreach ($products as &$p) {
            $p['price_str'] = wa_currency($p['price'], $currency);
            $p['price_html'] = wa_currency_html($p['price'], $currency);
        }
        unset($p);

        if (waRequest::get('with_sku_name')) {
            $sku_ids = array();
            foreach ($products as $p) {
                $sku_ids[] = $p['sku_id'];
            }
            $product_skus_model = new shopProductSkusModel();
            $skus = $product_skus_model->getByField('id', $sku_ids, 'id');
            $sku_names = array();
            foreach ($skus as $sku_id => $sku) {
                if ($sku['name']) {
                    $name = $sku['name'];
                    if ($sku['sku']) {
                        $name .= ' ('.$sku['sku'].')';
                    }
                } else {
                    $name = $sku['sku'];
                }
                $sku_names[$sku_id] = $name;
            }
            foreach ($products as &$p) {
                $p['sku_name'] = $sku_names[$p['sku_id']];
            }
            unset($p);
        }

        return array_values($products);
    }
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ответы на вопрос 1
rasschitai
@rasschitai
Калькуляторы онлайн
как то так
... where("name LIKE '$q%' OR id LIKE '$q%'") ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы