/** * @inheritdoc */ public function generateCondition(ConditionInterface $condition, QueryBuilder $query, ShopContextInterface $context) { if (!$query->hasState(self::STATE_ESD_INCLUDED)) { $query->innerJoin('product', 's_articles_esd', 'esd', 'esd.articleID = product.id'); $query->addState(self::STATE_ESD_INCLUDED); } }
/** * {@inheritdoc} */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { if (!$query->hasState(SalesConditionHandler::STATE_INCLUDES_TOPSELLER_TABLE)) { $query->leftJoin('product', 's_articles_top_seller_ro', 'topSeller', 'topSeller.article_id = product.id'); $query->addState(SalesConditionHandler::STATE_INCLUDES_TOPSELLER_TABLE); } /** @var PopularitySorting $sorting */ $query->addOrderBy('topSeller.sales', $sorting->getDirection())->addOrderBy('topSeller.article_id', $sorting->getDirection()); }
/** * {@inheritdoc} */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { if (!$query->hasState(SearchTermConditionHandler::STATE_INCLUDES_RANKING)) { return; } /** @var SearchRankingSorting $sorting */ $query->addOrderBy('searchTable.ranking', $sorting->getDirection()); $query->addOrderBy('product.id', $sorting->getDirection()); }
/** * Extends the query and returns the alias to bind the definition to. * * @param QueryBuilder $queryBuilder * @param AbstractSortDefinition $definition * * @return string */ public function extendQuery(QueryBuilder $queryBuilder, AbstractSortDefinition $definition) { $alias = $this->createAlias('Variant'); if ($queryBuilder->hasState($alias)) { return $alias; } $queryBuilder->addState($alias); return 'variant'; }
/** * Extends the query and returns the alias to bind the definitition to. * * @param QueryBuilder $queryBuilder * * @return string */ public function extendQuery(QueryBuilder $queryBuilder, AbstractSortDefinition $definition) { $alias = $this->createAlias('Variant'); if ($queryBuilder->hasState($alias)) { return $alias; } $queryBuilder->leftJoin('product', $this->getTableName(), $alias, $alias . '.articleID = product.id'); $queryBuilder->addState($alias); return $alias; }
/** * {@inheritdoc} */ public function generateCondition(ConditionInterface $condition, QueryBuilder $query, ShopContextInterface $context) { if (!$query->hasState(self::STATE_INCLUDES_TOPSELLER_TABLE)) { $query->leftJoin('product', 's_articles_top_seller_ro', 'topSeller', 'topSeller.article_id = product.id'); $query->addState(self::STATE_INCLUDES_TOPSELLER_TABLE); } $query->andWhere('topSeller.sales > :sales'); /** @var SalesCondition $condition */ $query->setParameter('sales', $condition->getMinSales()); }
/** * Extends the query and returns the alias to bind the definition to. * * @param QueryBuilder $queryBuilder * @param AbstractSortDefinition $definition * * @return string join alias */ public function extendQuery(QueryBuilder $queryBuilder, AbstractSortDefinition $definition) { $alias = $this->createAlias('Select'); if ($queryBuilder->hasState($alias)) { return $alias; } $subQueryAlias = $this->createAlias('Inner'); $subQueryBuilder = Shopware()->Models()->getDBALQueryBuilder(); $subQueryBuilder->select($this->getSelectWithExpression($definition, $subQueryAlias))->from($this->getTableName(), $subQueryAlias)->where('product.id = ' . $subQueryAlias . '.articleID'); $queryBuilder->addSelect('(' . $subQueryBuilder->getSQL() . ') AS ' . $alias . '_' . $definition->getFieldName()); return $alias; }
/** * @inheritdoc */ public function joinAvailableVariant(QueryBuilder $query) { if ($query->hasState(self::STATE_INCLUDES_AVAILABLE_VARIANT)) { return; } $stockCondition = ''; if ($this->config->get('hideNoInstock')) { $stockCondition = 'AND (product.laststock * availableVariant.instock) >= (product.laststock * availableVariant.minpurchase)'; } $query->innerJoin('product', 's_articles_details', 'availableVariant', 'availableVariant.articleID = product.id AND availableVariant.active = 1 ' . $stockCondition); $query->addState(self::STATE_INCLUDES_AVAILABLE_VARIANT); }