IndexBuilder.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CatalogSearch\Model\Search;
  7. use Magento\Framework\App\Config\ScopeConfigInterface;
  8. use Magento\Framework\App\ResourceConnection;
  9. use Magento\Framework\DB\Select;
  10. use Magento\Framework\Search\Adapter\Mysql\ConditionManager;
  11. use Magento\Framework\Search\Adapter\Mysql\IndexBuilderInterface;
  12. use Magento\Framework\Search\RequestInterface;
  13. use Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver;
  14. use Magento\Store\Model\StoreManagerInterface;
  15. use Magento\Framework\App\ScopeResolverInterface;
  16. use Magento\Framework\App\ObjectManager;
  17. use Magento\CatalogSearch\Model\Search\FilterMapper\DimensionsProcessor;
  18. use Magento\CatalogSearch\Model\Search\SelectContainer\SelectContainer;
  19. use Magento\CatalogSearch\Model\Search\SelectContainer\SelectContainerBuilder;
  20. use Magento\CatalogSearch\Model\Search\BaseSelectStrategy\StrategyMapper as BaseSelectStrategyMapper;
  21. use Magento\CatalogSearch\Model\Search\BaseSelectStrategy\BaseSelectStrategyInterface;
  22. use Magento\CatalogSearch\Model\Search\FilterMapper\FilterMapper;
  23. /**
  24. * Build base Query for Index
  25. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  26. * @deprecated 101.0.0
  27. * @see \Magento\ElasticSearch
  28. */
  29. class IndexBuilder implements IndexBuilderInterface
  30. {
  31. /**
  32. * @var DimensionsProcessor
  33. */
  34. private $dimensionsProcessor;
  35. /**
  36. * @var SelectContainerBuilder
  37. */
  38. private $selectContainerBuilder;
  39. /**
  40. * @var BaseSelectStrategyMapper
  41. */
  42. private $baseSelectStrategyMapper;
  43. /**
  44. * @var FilterMapper
  45. */
  46. private $filterMapper;
  47. /**
  48. * @param ResourceConnection $resource
  49. * @param ScopeConfigInterface $config
  50. * @param StoreManagerInterface $storeManager
  51. * @param ConditionManager $conditionManager
  52. * @param IndexScopeResolver $scopeResolver
  53. * @param TableMapper $tableMapper
  54. * @param ScopeResolverInterface $dimensionScopeResolver
  55. * @param DimensionsProcessor|null $dimensionsProcessor
  56. * @param SelectContainerBuilder|null $selectContainerBuilder
  57. * @param BaseSelectStrategyMapper|null $baseSelectStrategyMapper
  58. * @param FilterMapper|null $filterMapper
  59. * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  60. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  61. */
  62. public function __construct(
  63. ResourceConnection $resource,
  64. ScopeConfigInterface $config,
  65. StoreManagerInterface $storeManager,
  66. ConditionManager $conditionManager,
  67. IndexScopeResolver $scopeResolver,
  68. TableMapper $tableMapper,
  69. ScopeResolverInterface $dimensionScopeResolver,
  70. DimensionsProcessor $dimensionsProcessor = null,
  71. SelectContainerBuilder $selectContainerBuilder = null,
  72. BaseSelectStrategyMapper $baseSelectStrategyMapper = null,
  73. FilterMapper $filterMapper = null
  74. ) {
  75. $this->dimensionsProcessor = $dimensionsProcessor ?: ObjectManager::getInstance()
  76. ->get(DimensionsProcessor::class);
  77. $this->selectContainerBuilder = $selectContainerBuilder ?: ObjectManager::getInstance()
  78. ->get(SelectContainerBuilder::class);
  79. $this->baseSelectStrategyMapper = $baseSelectStrategyMapper ?: ObjectManager::getInstance()
  80. ->get(BaseSelectStrategyMapper::class);
  81. $this->filterMapper = $filterMapper ?: ObjectManager::getInstance()
  82. ->get(FilterMapper::class);
  83. }
  84. /**
  85. * Build index query
  86. *
  87. * @param RequestInterface $request
  88. * @return Select
  89. * @throws \DomainException
  90. * @throws \InvalidArgumentException
  91. * @throws \Magento\Framework\Exception\LocalizedException
  92. */
  93. public function build(RequestInterface $request)
  94. {
  95. /** @var SelectContainer $selectContainer */
  96. $selectContainer = $this->selectContainerBuilder->buildByRequest($request);
  97. /** @var BaseSelectStrategyInterface $baseSelectStrategy */
  98. $baseSelectStrategy = $this->baseSelectStrategyMapper->mapSelectContainerToStrategy($selectContainer);
  99. $selectContainer = $baseSelectStrategy->createBaseSelect($selectContainer);
  100. $selectContainer = $this->filterMapper->applyFilters($selectContainer);
  101. $selectContainer = $this->dimensionsProcessor->processDimensions($selectContainer);
  102. return $selectContainer->getSelect();
  103. }
  104. }