Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
LinkedProductSelectBuilderByTierPrice.php
Go to the documentation of this file.
1 <?php
7 
11 
13 {
17  const DEFAULT_WEBSITE_ID = 0;
18 
22  private $storeManager;
23 
27  private $resource;
28 
32  private $customerSession;
33 
37  private $catalogHelper;
38 
42  private $metadataPool;
43 
47  private $baseSelectProcessor;
48 
57  public function __construct(
58  \Magento\Store\Model\StoreManagerInterface $storeManager,
60  \Magento\Customer\Model\Session $customerSession,
61  \Magento\Catalog\Helper\Data $catalogHelper,
62  \Magento\Framework\EntityManager\MetadataPool $metadataPool,
63  BaseSelectProcessorInterface $baseSelectProcessor = null
64  ) {
65  $this->storeManager = $storeManager;
66  $this->resource = $resourceConnection;
67  $this->customerSession = $customerSession;
68  $this->catalogHelper = $catalogHelper;
69  $this->metadataPool = $metadataPool;
70  $this->baseSelectProcessor = (null !== $baseSelectProcessor)
71  ? $baseSelectProcessor : ObjectManager::getInstance()->get(BaseSelectProcessorInterface::class);
72  }
73 
77  public function build($productId)
78  {
79  $linkField = $this->metadataPool->getMetadata(ProductInterface::class)->getLinkField();
80  $productTable = $this->resource->getTableName('catalog_product_entity');
81 
82  $priceSelect = $this->resource->getConnection()->select()
83  ->from(['parent' => $productTable], '')
84  ->joinInner(
85  ['link' => $this->resource->getTableName('catalog_product_relation')],
86  "link.parent_id = parent.$linkField",
87  []
88  )->joinInner(
90  sprintf('%s.entity_id = link.child_id', BaseSelectProcessorInterface::PRODUCT_TABLE_ALIAS),
91  ['entity_id']
92  )->joinInner(
93  ['t' => $this->resource->getTableName('catalog_product_entity_tier_price')],
94  sprintf('t.%s = %s.%1$s', $linkField, BaseSelectProcessorInterface::PRODUCT_TABLE_ALIAS),
95  []
96  )->where('parent.entity_id = ?', $productId)
97  ->where('t.all_groups = 1 OR customer_group_id = ?', $this->customerSession->getCustomerGroupId())
98  ->where('t.qty = ?', 1)
99  ->order('t.value ' . Select::SQL_ASC)
100  ->order(BaseSelectProcessorInterface::PRODUCT_TABLE_ALIAS . '.' . $linkField . ' ' . Select::SQL_ASC)
101  ->limit(1);
102  $priceSelect = $this->baseSelectProcessor->process($priceSelect);
103 
104  if (!$this->catalogHelper->isPriceGlobal()) {
105  $priceSelectStore = clone $priceSelect;
106  $priceSelectStore->where('t.website_id = ?', $this->storeManager->getStore()->getWebsiteId());
107  $selects[] = $priceSelectStore;
108  }
109 
110  $priceSelect->where('t.website_id = ?', self::DEFAULT_WEBSITE_ID);
111  $selects[] = $priceSelect;
112 
113  return $selects;
114  }
115 }
__construct(\Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\App\ResourceConnection $resourceConnection, \Magento\Customer\Model\Session $customerSession, \Magento\Catalog\Helper\Data $catalogHelper, \Magento\Framework\EntityManager\MetadataPool $metadataPool, BaseSelectProcessorInterface $baseSelectProcessor=null)
$storeManager
const SQL_ASC
Definition: Select.php:81