resourceConnection = $resourceConnection; $this->metadataPool = $metadataPool; } /** * @param string $idxTable * @return Select */ public function buildSelect($idxTable) { $select = $this->resourceConnection->getConnection()->select(); $linkField = $this->metadataPool->getMetadata(ProductInterface::class)->getLinkField(); $select->from( ['product' => $this->resourceConnection->getTableName('catalog_product_entity')], ['entity_id'] )->join( ['bo' => $this->resourceConnection->getTableName('catalog_product_bundle_option')], "bo.parent_id = product.$linkField", [] )->join( ['cis' => $this->resourceConnection->getTableName('cataloginventory_stock')], '', ['website_id', 'stock_id'] )->joinLeft( ['bs' => $this->resourceConnection->getTableName('catalog_product_bundle_selection')], 'bs.option_id = bo.option_id', [] )->joinLeft( ['i' => $idxTable], 'i.product_id = bs.product_id AND i.website_id = cis.website_id AND i.stock_id = cis.stock_id', [] )->joinLeft( ['e' => $this->resourceConnection->getTableName('catalog_product_entity')], 'e.entity_id = bs.product_id', [] )->group( ['product.entity_id', 'cis.website_id', 'cis.stock_id', 'bo.option_id'] )->columns(['option_id' => 'bo.option_id']); return $select; } }