/** * {@inheritdoc} */ public function generateCondition(ConditionInterface $condition, QueryBuilder $query, ShopContextInterface $context) { $query->innerJoin('product', 's_articles_details', 'allVariants', 'allVariants.articleID = product.id AND allVariants.active = 1 AND allVariants.instock >= allVariants.minpurchase'); $query->addState(self::STATE_INCLUDES_ALL_VARIANTS); }
/** * @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()); }
/** * 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()); }
/** * {@inheritdoc} */ public function generateCondition(ConditionInterface $condition, QueryBuilder $query, ShopContextInterface $context) { $table = ' SELECT SUM(vote.points) / COUNT(vote.id) AS average, vote.articleID AS product_id FROM s_articles_vote vote GROUP BY vote.articleID'; $query->innerJoin('product', '(' . $table . ')', 'voteAverage', 'voteAverage.product_id = product.id AND voteAverage.average >= :average'); /** @var VoteAverageCondition $condition */ $query->setParameter(':average', (double) $condition->getAverage()); $query->addSelect('voteAverage.average'); $query->addState(VoteAverageCondition::STATE_INCLUDES_VOTE_TABLE); }
/** * {@inheritdoc} */ public function generateCondition(ConditionInterface $condition, QueryBuilder $query, ShopContextInterface $context) { /** @var SearchTermCondition $condition */ $searchQuery = $this->searchTermQueryBuilder->buildQuery($condition->getTerm()); //no matching products found by the search query builder. //add condition that the result contains no product. if ($searchQuery == null) { $query->andWhere('0 = 1'); return; } $queryString = $searchQuery->getSQL(); $query->addSelect('searchTable.*'); $query->addState(self::STATE_INCLUDES_RANKING); $query->innerJoin('product', '(' . $queryString . ')', 'searchTable', 'searchTable.product_id = product.id'); }
/** * @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); }