Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ProductPriceIndexModifier.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
15 
20 {
24  private $priceResourceModel;
25 
29  private $resourceConnection;
30 
34  private $connectionName;
35 
41  public function __construct(
42  Price $priceResourceModel,
43  ResourceConnection $resourceConnection,
44  $connectionName = 'indexer'
45  ) {
46  $this->priceResourceModel = $priceResourceModel;
47  $this->resourceConnection = $resourceConnection ?: ObjectManager::getInstance()->get(ResourceConnection::class);
48  $this->connectionName = $connectionName;
49  }
50 
54  public function modifyPrice(IndexTableStructure $priceTable, array $entityIds = []) : void
55  {
56  $connection = $this->resourceConnection->getConnection($this->connectionName);
57 
58  $select = $connection->select();
59 
60  $select->join(
61  ['cpiw' => $this->priceResourceModel->getTable('catalog_product_index_website')],
62  'cpiw.website_id = i.' . $priceTable->getWebsiteField(),
63  []
64  );
65  $select->join(
66  ['cpp' => $this->priceResourceModel->getMainTable()],
67  'cpp.product_id = i.' . $priceTable->getEntityField()
68  . ' AND cpp.customer_group_id = i.' . $priceTable->getCustomerGroupField()
69  . ' AND cpp.website_id = i.' . $priceTable->getWebsiteField()
70  . ' AND cpp.rule_date = cpiw.website_date',
71  []
72  );
73  if ($entityIds) {
74  $select->where('i.entity_id IN (?)', $entityIds);
75  }
76 
77  $finalPrice = $priceTable->getFinalPriceField();
78  $finalPriceExpr = $select->getConnection()->getLeastSql([
79  $priceTable->getFinalPriceField(),
80  $select->getConnection()->getIfNullSql('cpp.rule_price', 'i.' . $finalPrice),
81  ]);
82  $minPrice = $priceTable->getMinPriceField();
83  $minPriceExpr = $select->getConnection()->getLeastSql([
84  $priceTable->getMinPriceField(),
85  $select->getConnection()->getIfNullSql('cpp.rule_price', 'i.' . $minPrice),
86  ]);
87  $select->columns([
88  $finalPrice => $finalPriceExpr,
89  $minPrice => $minPriceExpr,
90  ]);
91 
92  $query = $connection->updateFromSelect($select, ['i' => $priceTable->getTableName()]);
93  $connection->query($query);
94  }
95 }
__construct(Price $priceResourceModel, ResourceConnection $resourceConnection, $connectionName='indexer')
$connection
Definition: bulk.php:13
modifyPrice(IndexTableStructure $priceTable, array $entityIds=[])