Example #1
0
 /**
  * @inheritdoc
  */
 public function getList(array $valueIds, Struct\ShopContextInterface $context)
 {
     $query = $this->connection->createQueryBuilder();
     $sortMode = $this->getSortMode($valueIds);
     $query->addSelect($this->fieldHelper->getPropertySetFields())->addSelect($this->fieldHelper->getPropertyGroupFields())->addSelect($this->fieldHelper->getPropertyOptionFields())->addSelect($this->fieldHelper->getMediaFields());
     $query->from('s_filter', 'propertySet');
     $query->innerJoin('propertySet', 's_filter_relations', 'relations', 'relations.groupID = propertySet.id');
     $query->leftJoin('propertySet', 's_filter_attributes', 'propertySetAttribute', 'propertySetAttribute.filterID = propertySet.id');
     $query->innerJoin('relations', 's_filter_options', 'propertyGroup', 'relations.optionID = propertyGroup.id
          AND filterable = 1');
     $query->innerJoin('propertyGroup', 's_filter_values', 'propertyOption', 'propertyOption.optionID = propertyGroup.id');
     $query->leftJoin('propertyOption', 's_media', 'media', 'propertyOption.media_id = media.id');
     $query->leftJoin('media', 's_media_attributes', 'mediaAttribute', 'mediaAttribute.mediaID = media.id');
     $query->leftJoin('media', 's_media_album_settings', 'mediaSettings', 'mediaSettings.albumID = media.albumID');
     $this->fieldHelper->addAllPropertyTranslations($query, $context);
     $query->groupBy('propertyOption.id');
     $query->where('propertyOption.id IN (:ids)')->setParameter(':ids', $valueIds, Connection::PARAM_INT_ARRAY);
     $query->orderBy('propertySet.position')->addOrderBy('propertySet.id')->addOrderBy('relations.position')->addOrderBy('propertyGroup.name');
     switch ($sortMode) {
         case self::FILTERS_SORT_NUMERIC:
             $query->addOrderBy('propertyOption.value_numeric');
             break;
         case self::FILTERS_SORT_POSITION:
             $query->addOrderBy('propertyOption.position');
             break;
         default:
             $query->addOrderBy('propertyOption.value');
     }
     $query->addOrderBy('propertyOption.id');
     /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */
     $statement = $query->execute();
     $rows = $statement->fetchAll(\PDO::FETCH_ASSOC);
     return $this->propertyHydrator->hydrateValues($rows);
 }
 /**
  * @inheritdoc
  */
 public function getList($products, Struct\ShopContextInterface $context)
 {
     $ids = [];
     foreach ($products as $product) {
         $ids[] = $product->getId();
     }
     $ids = array_unique($ids);
     $query = $this->connection->createQueryBuilder();
     $query->addSelect('products.id as productId')->addSelect($this->fieldHelper->getPropertySetFields())->addSelect($this->fieldHelper->getPropertyGroupFields())->addSelect($this->fieldHelper->getPropertyOptionFields())->addSelect($this->fieldHelper->getMediaFields());
     $query->addSelect('
     (
         CASE
             WHEN propertySet.sortmode = 1 THEN propertyOption.value_numeric
             WHEN propertySet.sortmode = 3 THEN propertyOption.position
             ELSE propertyOption.value
         END
     ) as sortRelevance');
     $query->from('s_filter_articles', 'filterArticles');
     $query->innerJoin('filterArticles', 's_articles', 'products', 'products.id = filterArticles.articleID');
     $query->innerJoin('filterArticles', 's_filter_values', 'propertyOption', 'propertyOption.id = filterArticles.valueID');
     $query->innerJoin('products', 's_filter', 'propertySet', 'propertySet.id = products.filtergroupID');
     $query->leftJoin('propertySet', 's_filter_attributes', 'propertySetAttribute', 'propertySetAttribute.filterID = propertySet.id');
     $query->innerJoin('propertySet', 's_filter_relations', 'relations', 'relations.groupID = propertySet.id');
     $query->innerJoin('propertyOption', 's_filter_options', 'propertyGroup', 'propertyGroup.id = propertyOption.optionID AND relations.optionID = propertyGroup.id');
     $query->leftJoin('propertyOption', 's_media', 'media', 'propertyOption.media_id = media.id');
     $query->leftJoin('media', 's_media_attributes', 'mediaAttribute', 'mediaAttribute.mediaID = media.id');
     $query->leftJoin('media', 's_media_album_settings', 'mediaSettings', 'mediaSettings.albumID = media.albumID');
     $this->fieldHelper->addAllPropertyTranslations($query, $context);
     $query->where('products.id IN (:ids)')->setParameter(':ids', $ids, Connection::PARAM_INT_ARRAY);
     $query->orderBy('filterArticles.articleID')->addOrderBy('relations.position')->addOrderBy('propertyGroup.name')->addOrderBy('sortRelevance')->addOrderBy('propertyOption.id');
     /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */
     $statement = $query->execute();
     $data = $statement->fetchAll(\PDO::FETCH_GROUP);
     $properties = [];
     foreach ($data as $productId => $values) {
         $properties[$productId] = $this->propertyHydrator->hydrateValues($values);
     }
     $result = [];
     foreach ($products as $product) {
         if (!isset($properties[$product->getId()])) {
             continue;
         }
         $sets = $properties[$product->getId()];
         $result[$product->getNumber()] = array_shift($sets);
     }
     return $result;
 }
Example #3
0
 /**
  * @return \Doctrine\DBAL\Query\QueryBuilder
  */
 private function getQuery()
 {
     $query = $this->connection->createQueryBuilder();
     $query->select($this->fieldHelper->getMediaFields());
     $query->from('s_media', 'media')->innerJoin('media', 's_media_album_settings', 'mediaSettings', 'mediaSettings.albumID = media.albumID')->leftJoin('media', 's_media_attributes', 'mediaAttribute', 'mediaAttribute.mediaID = media.id');
     $query->where('media.id IN (:ids)');
     return $query;
 }
 /**
  * @param \Shopware\Bundle\StoreFrontBundle\Struct\ShopContextInterface $context
  * @return \Doctrine\DBAL\Query\QueryBuilder
  */
 private function getQuery(Struct\ShopContextInterface $context)
 {
     $query = $this->connection->createQueryBuilder();
     $query->addSelect('variant.ordernumber as number')->addSelect($this->fieldHelper->getMediaFields())->addSelect($this->fieldHelper->getImageFields());
     $this->fieldHelper->addImageTranslation($query, $context);
     $query->from('s_articles_img', 'image')->innerJoin('image', 's_media', 'media', 'image.media_id = media.id')->innerJoin('media', 's_media_album_settings', 'mediaSettings', 'mediaSettings.albumID = media.albumID')->innerJoin('image', 's_articles_img', 'childImage', 'childImage.parent_id = image.id')->innerJoin('image', 's_articles_details', 'variant', 'variant.id = childImage.article_detail_id')->leftJoin('image', 's_media_attributes', 'mediaAttribute', 'mediaAttribute.mediaID = image.media_id')->leftJoin('image', 's_articles_img_attributes', 'imageAttribute', 'imageAttribute.imageID = image.id');
     return $query;
 }
Example #5
0
 /**
  * @inheritdoc
  */
 public function getList(array $ids, Struct\ShopContextInterface $context)
 {
     $query = $this->connection->createQueryBuilder();
     $query->select($this->fieldHelper->getCategoryFields())->addSelect($this->fieldHelper->getMediaFields())->addSelect("GROUP_CONCAT(customerGroups.customergroupID) as __category_customer_groups");
     $query->from('s_categories', 'category');
     $query->leftJoin('category', 's_categories_attributes', 'categoryAttribute', 'categoryAttribute.categoryID = category.id')->leftJoin('category', 's_categories_avoid_customergroups', 'customerGroups', 'customerGroups.categoryID = category.id')->leftJoin('category', 's_media', 'media', 'media.id = category.mediaID')->leftJoin('media', 's_media_album_settings', 'mediaSettings', 'mediaSettings.albumID = media.albumID')->leftJoin('media', 's_media_attributes', 'mediaAttribute', 'mediaAttribute.mediaID = media.id');
     $query->addOrderBy('category.position')->addOrderBy('category.id')->addGroupBy('category.id');
     $query->where('category.id IN (:categories)')->andWhere('category.active = 1');
     $query->setParameter(':categories', $ids, Connection::PARAM_INT_ARRAY);
     /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */
     $statement = $query->execute();
     $data = $statement->fetchAll(\PDO::FETCH_ASSOC);
     $categories = [];
     foreach ($data as $row) {
         $id = $row['__category_id'];
         $categories[$id] = $this->categoryHydrator->hydrate($row);
     }
     return $categories;
 }
Example #6
0
 /**
  * @param ShopContextInterface $context
  * @return \Doctrine\DBAL\Query\QueryBuilder
  */
 private function getQuery(ShopContextInterface $context)
 {
     $query = $this->connection->createQueryBuilder();
     $query->addSelect($this->fieldHelper->getPropertyGroupFields())->addSelect($this->fieldHelper->getPropertyOptionFields())->addSelect($this->fieldHelper->getMediaFields());
     $query->from('s_filter_options', 'propertyGroup')->innerJoin('propertyGroup', 's_filter_values', 'propertyOption', 'propertyOption.optionID = propertyGroup.id')->leftJoin('propertyOption', 's_media', 'media', 'propertyOption.media_id = media.id')->leftJoin('media', 's_media_attributes', 'mediaAttribute', 'mediaAttribute.mediaID = media.id')->leftJoin('media', 's_media_album_settings', 'mediaSettings', 'mediaSettings.albumID = media.albumID');
     $this->fieldHelper->addPropertyGroupTranslation($query, $context);
     $this->fieldHelper->addPropertyOptionTranslation($query, $context);
     $query->where('propertyGroup.id = :id');
     return $query;
 }
Example #7
0
 /**
  * @param int[] $ids
  * @return \array[]
  */
 private function getShops($ids)
 {
     $query = $this->connection->createQueryBuilder();
     $query->addSelect($this->fieldHelper->getShopFields())->addSelect($this->fieldHelper->getCurrencyFields())->addSelect($this->fieldHelper->getTemplateFields())->addSelect($this->fieldHelper->getLocaleFields())->addSelect($this->fieldHelper->getCustomerGroupFields())->addSelect($this->fieldHelper->getCategoryFields())->addSelect($this->fieldHelper->getMediaFields());
     $query->from('s_core_shops', 'shop')->leftJoin('shop', 's_core_currencies', 'currency', 'currency.id = shop.currency_id')->leftJoin('shop', 's_core_templates', 'template', 'shop.template_id = template.id')->leftJoin('shop', 's_core_locales', 'locale', 'locale.id = shop.locale_id')->leftJoin('shop', 's_core_customergroups', 'customerGroup', 'customerGroup.id = shop.customer_group_id')->leftJoin('customerGroup', 's_core_customergroups_attributes', 'customerGroupAttribute', 'customerGroupAttribute.customerGroupID = customerGroup.id')->leftJoin('shop', 's_categories', 'category', 'category.id = shop.category_id')->leftJoin('category', 's_categories_attributes', 'categoryAttribute', 'categoryAttribute.categoryID = category.id')->leftJoin('category', 's_categories_avoid_customergroups', 'customerGroups', 'customerGroups.categoryID = category.id')->leftJoin('category', 's_media', 'media', 'media.id = category.mediaID')->leftJoin('media', 's_media_album_settings', 'mediaSettings', 'mediaSettings.albumID = media.albumID')->leftJoin('media', 's_media_attributes', 'mediaAttribute', 'mediaAttribute.mediaID = media.id');
     $query->where('shop.id IN (:ids)')->setParameter(':ids', $ids, Connection::PARAM_INT_ARRAY);
     $data = $query->execute()->fetchAll(\PDO::FETCH_ASSOC);
     $result = [];
     foreach ($data as $row) {
         $result[$row['__shop_id']] = $row;
     }
     return $result;
 }
Example #8
0
 /**
  * @param ListProduct[] $products
  * @param ShopContextInterface $context
  * @return \array[]
  */
 private function getProperties($products, ShopContextInterface $context)
 {
     $ids = array_map(function (ListProduct $product) {
         return $product->getId();
     }, $products);
     $query = $this->connection->createQueryBuilder();
     $query->addSelect('filterArticles.articleID as productId')->addSelect($this->fieldHelper->getPropertyOptionFields())->addSelect($this->fieldHelper->getMediaFields())->from('s_filter_articles', 'filterArticles')->innerJoin('filterArticles', 's_filter_values', 'propertyOption', 'propertyOption.id = filterArticles.valueID')->leftJoin('propertyOption', 's_media', 'media', 'propertyOption.media_id = media.id')->leftJoin('media', 's_media_attributes', 'mediaAttribute', 'mediaAttribute.mediaID = media.id')->leftJoin('media', 's_media_album_settings', 'mediaSettings', 'mediaSettings.albumID = media.albumID')->where('filterArticles.articleID IN (:ids)')->addOrderBy('filterArticles.articleID')->addOrderBy('propertyOption.value')->addOrderBy('propertyOption.id')->setParameter(':ids', $ids, Connection::PARAM_INT_ARRAY);
     $this->fieldHelper->addPropertyOptionTranslation($query, $context);
     /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */
     $statement = $query->execute();
     $data = $statement->fetchAll(\PDO::FETCH_GROUP);
     $properties = [];
     $hydrator = $this->propertyHydrator;
     foreach ($data as $productId => $values) {
         $options = array_map(function ($row) use($hydrator) {
             return $hydrator->hydrateOption($row);
         }, $values);
         $properties[$productId] = $options;
     }
     return $properties;
 }