Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
TierPricePersistence.php
Go to the documentation of this file.
1 <?php
8 
13 {
19  private $itemsPerOperation = 500;
20 
26  private $tierpriceResource;
27 
33  private $metadataPool;
34 
41  public function __construct(
42  \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice $tierpriceResource,
43  \Magento\Framework\EntityManager\MetadataPool $metadataPool
44  ) {
45  $this->tierpriceResource = $tierpriceResource;
46  $this->metadataPool = $metadataPool;
47  }
48 
55  public function get(array $ids)
56  {
57  $select = $this->tierpriceResource->getConnection()->select()->from($this->tierpriceResource->getMainTable());
58  return $this->tierpriceResource->getConnection()->fetchAll(
59  $select->where($this->getEntityLinkField() . ' IN (?)', $ids)
60  );
61  }
62 
70  public function update(array $prices)
71  {
72  $connection = $this->tierpriceResource->getConnection();
73  $connection->beginTransaction();
74  try {
75  foreach (array_chunk($prices, $this->itemsPerOperation) as $pricesBunch) {
76  $this->tierpriceResource->getConnection()->insertOnDuplicate(
77  $this->tierpriceResource->getMainTable(),
78  $pricesBunch,
79  ['value', 'percentage_value']
80  );
81  }
82  $connection->commit();
83  } catch (\Exception $e) {
84  $connection->rollBack();
85  throw new \Magento\Framework\Exception\CouldNotSaveException(
86  __('Could not save Tier Prices'),
87  $e
88  );
89  }
90  }
91 
100  public function replace(array $prices, array $ids)
101  {
102  $connection = $this->tierpriceResource->getConnection();
103  $connection->beginTransaction();
104  try {
105  foreach (array_chunk($ids, $this->itemsPerOperation) as $idsBunch) {
106  $this->tierpriceResource->getConnection()->delete(
107  $this->tierpriceResource->getMainTable(),
108  [$this->getEntityLinkField() . ' IN (?)' => $idsBunch]
109  );
110  }
111 
112  foreach (array_chunk($prices, $this->itemsPerOperation) as $pricesBunch) {
113  $this->tierpriceResource->getConnection()->insertMultiple(
114  $this->tierpriceResource->getMainTable(),
115  $pricesBunch
116  );
117  }
118  $connection->commit();
119  } catch (\Exception $e) {
120  $connection->rollBack();
121  throw new \Magento\Framework\Exception\CouldNotSaveException(
122  __('Could not replace Tier Prices'),
123  $e
124  );
125  }
126  }
127 
135  public function delete(array $ids)
136  {
137  $connection = $this->tierpriceResource->getConnection();
138  $connection->beginTransaction();
139  try {
140  foreach (array_chunk($ids, $this->itemsPerOperation) as $idsBunch) {
141  $this->tierpriceResource->getConnection()->delete(
142  $this->tierpriceResource->getMainTable(),
143  ['value_id IN (?)' => $idsBunch]
144  );
145  }
146  $connection->commit();
147  } catch (\Exception $e) {
148  $connection->rollBack();
149  throw new \Magento\Framework\Exception\CouldNotDeleteException(
150  __('Could not delete Tier Prices'),
151  $e
152  );
153  }
154  }
155 
161  public function getEntityLinkField()
162  {
163  return $this->metadataPool->getMetadata(\Magento\Catalog\Api\Data\ProductInterface::class)
164  ->getLinkField();
165  }
166 }
__construct(\Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice $tierpriceResource, \Magento\Framework\EntityManager\MetadataPool $metadataPool)
__()
Definition: __.php:13
$connection
Definition: bulk.php:13