Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Generator.php
Go to the documentation of this file.
1 <?php
8 
10 
14 class Generator
15 {
19  private $iteratorFactory;
20 
24  private $rangeIteratorFactory;
25 
32  public function __construct(
33  BatchIteratorFactory $iteratorFactory,
34  BatchRangeIteratorFactory $rangeIteratorFactory = null
35  ) {
36  $this->iteratorFactory = $iteratorFactory;
37  $this->rangeIteratorFactory = $rangeIteratorFactory ?: \Magento\Framework\App\ObjectManager::getInstance()
38  ->get(\Magento\Framework\DB\Query\BatchRangeIteratorFactory::class);
39  }
40 
66  public function generate(
67  $rangeField,
68  \Magento\Framework\DB\Select $select,
69  $batchSize = 100,
70  $batchStrategy = \Magento\Framework\DB\Query\BatchIteratorInterface::UNIQUE_FIELD_ITERATOR
71  ) {
72  if ($batchStrategy == \Magento\Framework\DB\Query\BatchIteratorInterface::NON_UNIQUE_FIELD_ITERATOR) {
73  return $this->generateByRange($rangeField, $select, $batchSize);
74  }
75 
76  $fromSelect = $select->getPart(\Magento\Framework\DB\Select::FROM);
77  if (empty($fromSelect)) {
78  throw new LocalizedException(
79  new \Magento\Framework\Phrase(
80  'The select object must have the correct "FROM" part. Verify and try again.'
81  )
82  );
83  }
84 
85  $fieldCorrelationName = '';
86  foreach ($fromSelect as $correlationName => $fromPart) {
87  if ($fromPart['joinType'] == \Magento\Framework\DB\Select::FROM) {
88  $fieldCorrelationName = $correlationName;
89  break;
90  }
91  }
92 
93  $columns = $select->getPart(\Magento\Framework\DB\Select::COLUMNS);
97  $rangeFieldAlias = $rangeField;
98  foreach ($columns as $column) {
99  list($table, $columnName, $alias) = $column;
100  if ($table == $fieldCorrelationName && $columnName == $rangeField) {
101  $rangeFieldAlias = $alias ?: $rangeField;
102  break;
103  }
104  }
105 
106  return $this->iteratorFactory->create(
107  [
108  'select' => $select,
109  'batchSize' => $batchSize,
110  'correlationName' => $fieldCorrelationName,
111  'rangeField' => $rangeField,
112  'rangeFieldAlias' => $rangeFieldAlias
113  ]
114  );
115  }
116 
141  public function generateByRange(
142  $rangeField,
143  \Magento\Framework\DB\Select $select,
144  $batchSize = 100
145  ) {
146  $fromSelect = $select->getPart(\Magento\Framework\DB\Select::FROM);
147  if (empty($fromSelect)) {
148  throw new LocalizedException(
149  new \Magento\Framework\Phrase(
150  'The select object must have the correct "FROM" part. Verify and try again.'
151  )
152  );
153  }
154 
155  $fieldCorrelationName = '';
156  foreach ($fromSelect as $correlationName => $fromPart) {
157  if ($fromPart['joinType'] == \Magento\Framework\DB\Select::FROM) {
158  $fieldCorrelationName = $correlationName;
159  break;
160  }
161  }
162 
163  $columns = $select->getPart(\Magento\Framework\DB\Select::COLUMNS);
167  $rangeFieldAlias = $rangeField;
168  foreach ($columns as $column) {
169  list($table, $columnName, $alias) = $column;
170  if ($table == $fieldCorrelationName && $columnName == $rangeField) {
171  $rangeFieldAlias = $alias ?: $rangeField;
172  break;
173  }
174  }
175 
176  return $this->rangeIteratorFactory->create(
177  [
178  'select' => $select,
179  'batchSize' => $batchSize,
180  'correlationName' => $fieldCorrelationName,
181  'rangeField' => $rangeField,
182  'rangeFieldAlias' => $rangeFieldAlias,
183  ]
184  );
185  }
186 }
generateByRange( $rangeField, \Magento\Framework\DB\Select $select, $batchSize=100)
Definition: Generator.php:141
generate( $rangeField, \Magento\Framework\DB\Select $select, $batchSize=100, $batchStrategy=\Magento\Framework\DB\Query\BatchIteratorInterface::UNIQUE_FIELD_ITERATOR)
Definition: Generator.php:66
const FROM
Definition: Select.php:49
$columns
Definition: default.phtml:15
const COLUMNS
Definition: Select.php:48
if(!trim($html)) $alias
Definition: details.phtml:20
$table
Definition: trigger.php:14
__construct(BatchIteratorFactory $iteratorFactory, BatchRangeIteratorFactory $rangeIteratorFactory=null)
Definition: Generator.php:32