Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
GenericMapper.php
Go to the documentation of this file.
1 <?php
6 namespace Magento\Framework\DB;
7 
9 
14 {
20  protected function init()
21  {
22  //
23  }
24 
31  public function mapCriteriaList(array $criteriaList)
32  {
33  foreach ($criteriaList as $criteria) {
35  $mapper = $criteria->getMapperInterfaceName();
36  $mapperInstance = $this->mapperFactory->create($mapper, ['select' => $this->select]);
37  $this->select = $mapperInstance->map($criteria);
38  }
39  }
40 
47  public function mapFilters(array $filters)
48  {
49  $this->renderFiltersBefore();
50  foreach ($filters as $filter) {
51  switch ($filter['type']) {
52  case 'or':
53  $condition = $this->getConnection()->quoteInto($filter['field'] . '=?', $filter['condition']);
54  $this->getSelect()->orWhere($condition);
55  break;
56  case 'string':
57  $this->getSelect()->where($filter['condition']);
58  break;
59  case 'public':
60  $field = $this->getMappedField($filter['field']);
61  $condition = $filter['condition'];
62  $this->getSelect()->where($this->getConditionSql($field, $condition), null, Select::TYPE_CONDITION);
63  break;
64  default:
65  $condition = $this->getConnection()->quoteInto($filter['field'] . '=?', $filter['condition']);
66  $this->getSelect()->where($condition);
67  }
68  }
69  }
70 
77  public function mapOrders(array $orders)
78  {
79  foreach ($orders as $field => $direction) {
80  $this->select->order(new \Zend_Db_Expr($field . ' ' . $direction));
81  }
82  }
83 
92  public function mapFields(array $fields)
93  {
94  $columns = $this->getSelect()->getPart(\Magento\Framework\DB\Select::COLUMNS);
95  $selectedUniqueNames = [];
96  foreach ($fields as $fieldInfo) {
97  if (is_string($fieldInfo)) {
98  $fieldInfo = isset($this->map[$fieldInfo]) ? $this->map[$fieldInfo] : $fieldInfo;
99  }
100  list($correlationName, $field, $alias) = $fieldInfo;
101  if (!is_string($alias)) {
102  $alias = null;
103  }
104  if ($field instanceof \Zend_Db_Expr) {
105  $field = $field->__toString();
106  }
107  $selectedUniqueName = $alias ?: $field;
108  if (in_array($selectedUniqueName, $selectedUniqueNames)) {
109  // ignore field since the alias is already used by another field
110  continue;
111  }
112  $selectedUniqueNames[] = $selectedUniqueName;
113  $columns[] = [$correlationName, $field, $alias];
114  }
115  $this->getSelect()->setPart(\Magento\Framework\DB\Select::COLUMNS, $columns);
116  }
117 
125  public function mapLimit($offset, $size)
126  {
127  $this->select->limitPage($offset, $size);
128  }
129 
136  public function mapDistinct($flag)
137  {
138  $this->select->distinct($flag);
139  }
140 }
map(CriteriaInterface $criteria)
getConditionSql($fieldName, $condition)
$fields
Definition: details.phtml:14
$columns
Definition: default.phtml:15
const COLUMNS
Definition: Select.php:48
$filters
Definition: uploader.phtml:11
if(!trim($html)) $alias
Definition: details.phtml:20