Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ConditionResolver.php
Go to the documentation of this file.
1 <?php
8 
11 
16 {
20  private $conditionMap = [
21  'eq' => '%1$s = %2$s',
22  'neq' => '%1$s != %2$s',
23  'like' => '%1$s LIKE %2$s',
24  'nlike' => '%1$s NOT LIKE %2$s',
25  'in' => '%1$s IN(%2$s)',
26  'nin' => '%1$s NOT IN(%2$s)',
27  'notnull' => '%1$s IS NOT NULL',
28  'null' => '%1$s IS NULL',
29  'gt' => '%1$s > %2$s',
30  'lt' => '%1$s < %2$s',
31  'gteq' => '%1$s >= %2$s',
32  'lteq' => '%1$s <= %2$s',
33  'finset' => 'FIND_IN_SET(%2$s, %1$s)'
34  ];
35 
39  private $connection;
40 
44  private $resourceConnection;
45 
50  public function __construct(
51  ResourceConnection $resourceConnection
52  ) {
53  $this->resourceConnection = $resourceConnection;
54  }
55 
61  private function getConnection()
62  {
63  if (!$this->connection) {
64  $this->connection = $this->resourceConnection->getConnection();
65  }
66  return $this->connection;
67  }
68 
76  private function getValue($condition, $referencedEntity)
77  {
78  $value = null;
79  $argument = isset($condition['_value']) ? $condition['_value'] : null;
80  if (!isset($condition['type'])) {
81  $condition['type'] = 'value';
82  }
83 
84  switch ($condition['type']) {
85  case "value":
86  $value = $this->getConnection()->quote($argument);
87  break;
88  case "variable":
89  $value = new Expression($argument);
90  break;
91  case "identifier":
92  $value = $this->getConnection()->quoteIdentifier(
93  $referencedEntity ? $referencedEntity . '.' . $argument : $argument
94  );
95  break;
96  }
97  return $value;
98  }
99 
109  private function getCondition(SelectBuilder $selectBuilder, $tableName, $condition, $referencedEntity = null)
110  {
111  $columns = $selectBuilder->getColumns();
112  if (isset($columns[$condition['attribute']])
113  && $columns[$condition['attribute']] instanceof Expression
114  ) {
115  $expression = $columns[$condition['attribute']];
116  } else {
117  $expression = $this->getConnection()->quoteIdentifier($tableName . '.' . $condition['attribute']);
118  }
119  return sprintf(
120  $this->conditionMap[$condition['operator']],
121  $expression,
122  $this->getValue($condition, $referencedEntity)
123  );
124  }
125 
135  public function getFilter(SelectBuilder $selectBuilder, $filterConfig, $aliasName, $referencedAlias = null)
136  {
137  $filtersParts = [];
138  foreach ($filterConfig as $filter) {
139  $glue = $filter['glue'];
140  $parts = [];
141  foreach ($filter['condition'] as $condition) {
142  if (isset($condition['type']) && $condition['type'] == 'variable') {
143  $selectBuilder->setParams(array_merge($selectBuilder->getParams(), [$condition['_value']]));
144  }
145  $parts[] = $this->getCondition(
146  $selectBuilder,
147  $aliasName,
148  $condition,
149  $referencedAlias
150  );
151  }
152  if (isset($filter['filter'])) {
153  $parts[] = '(' . $this->getFilter(
154  $selectBuilder,
155  $filter['filter'],
156  $aliasName,
157  $referencedAlias
158  ) . ')';
159  }
160  $filtersParts[] = '(' . implode(' ' . strtoupper($glue) . ' ', $parts) . ')';
161  }
162  return implode(' OR ', $filtersParts);
163  }
164 }
$tableName
Definition: trigger.php:13
getFilter(SelectBuilder $selectBuilder, $filterConfig, $aliasName, $referencedAlias=null)
__construct(ResourceConnection $resourceConnection)
$columns
Definition: default.phtml:15
$value
Definition: gender.phtml:16