Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Grid.php
Go to the documentation of this file.
1 <?php
7 
9 
10 class Grid extends IndexerHandler
11 {
15  protected $dataTypes = ['searchable', 'filterable', 'virtual'];
16 
20  public function saveIndex($dimensions, \Traversable $documents)
21  {
22  foreach ($this->batch->getItems($documents, $this->batchSize) as $batchDocuments) {
23  $this->insertDocumentsForFilterable($batchDocuments, $dimensions);
24  }
25  }
26 
32  protected function insertDocumentsForFilterable(array $documents, array $dimensions)
33  {
34  $onDuplicate = [];
35  foreach ($this->fields as $field) {
36  if (in_array($field['type'], $this->dataTypes)) {
37  $onDuplicate[] = $field['name'];
38  }
39  }
40 
41  $this->connection->insertOnDuplicate(
42  $this->getTableName($this->dataTypes[1], $dimensions),
43  $this->prepareFilterableFields($documents),
44  $onDuplicate
45  );
46  }
47 
52  protected function prepareFilterableFields(array $documents)
53  {
54  $insertDocuments = [];
55  foreach ($documents as $entityId => $document) {
56  $documentFlat = ['entity_id' => $entityId];
57  foreach ($this->fields as $field) {
58  if (in_array($field['type'], $this->dataTypes)) {
59  $documentFlat[$field['name']] = $document[$field['name']];
60  }
61  }
62  $insertDocuments[] = $documentFlat;
63  }
64  return $insertDocuments;
65  }
66 
70  public function deleteIndex($dimensions, \Traversable $ids)
71  {
72  foreach ($this->batch->getItems($ids, $this->batchSize) as $batchIds) {
73  $this->connection->delete(
74  $this->getTableName('filterable', $dimensions),
75  ['entity_id IN(?)' => $batchIds]
76  );
77  }
78  }
79 }
insertDocumentsForFilterable(array $documents, array $dimensions)
Definition: Grid.php:32
saveIndex($dimensions, \Traversable $documents)
Definition: Grid.php:20
prepareFilterableFields(array $documents)
Definition: Grid.php:52
deleteIndex($dimensions, \Traversable $ids)
Definition: Grid.php:70