/** * @param \Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider $subject * @param callable $proceed * @param BucketInterface $bucket * @param Dimension[] $dimensions * * @return Select * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundGetDataSet(\Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider $subject, \Closure $proceed, BucketInterface $bucket, array $dimensions) { if ($bucket->getField() == 'category_ids') { $currentScope = $dimensions['scope']->getValue(); $currentScopeId = $this->scopeResolver->getScope($currentScope)->getId(); $currenCategory = $this->layer->getCurrentCategory(); $derivedTable = $this->getSelect(); $derivedTable->from(['main_table' => $this->resource->getTableName('catalog_category_product_index')], ['entity_id' => 'product_id', 'value' => 'category_id'])->where('main_table.store_id = ?', $currentScopeId); if (!empty($currenCategory)) { $derivedTable->join(['category' => $this->resource->getTableName('catalog_category_entity')], 'main_table.category_id = category.entity_id', [])->where('`category`.`path` LIKE ?', $currenCategory->getPath() . '%')->where('`category`.`level` > ?', $currenCategory->getLevel()); } $select = $this->getSelect(); $select->from(['main_table' => $derivedTable]); return $select; } return $proceed($bucket, $dimensions); }
/** * {@inheritdoc} */ public function getDataSet(BucketInterface $bucket, array $dimensions) { $currentScope = $dimensions['scope']->getValue(); $attribute = $this->eavConfig->getAttribute(Product::ENTITY, $bucket->getField()); if ($attribute->getAttributeCode() == 'price') { /** @var \Magento\Store\Model\Store $store */ $store = $this->scopeResolver->getScope($currentScope); if (!$store instanceof \Magento\Store\Model\Store) { throw new \RuntimeException('Illegal scope resolved'); } $table = $this->resource->getTableName('catalog_product_index_price'); $select = $this->getSelect(); $select->from(['main_table' => $table], null)->columns([BucketInterface::FIELD_VALUE => 'main_table.min_price'])->where('main_table.customer_group_id = ?', $this->customerSession->getCustomerGroupId())->where('main_table.website_id = ?', $store->getWebsiteId()); } else { $currentScopeId = $this->scopeResolver->getScope($currentScope)->getId(); $select = $this->getSelect(); $table = $this->resource->getTableName('catalog_product_index_eav' . ($attribute->getBackendType() == 'decimal' ? '_decimal' : '')); $select->from(['main_table' => $table], ['value'])->where('main_table.attribute_id = ?', $attribute->getAttributeId())->where('main_table.store_id = ? ', $currentScopeId); } return $select; }