Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ColumnsResolver.php
Go to the documentation of this file.
1 <?php
8 
11 
16 {
20  private $nameResolver;
21 
25  private $resourceConnection;
26 
30  private $connection;
31 
38  public function __construct(
39  NameResolver $nameResolver,
40  ResourceConnection $resourceConnection
41  ) {
42  $this->nameResolver = $nameResolver;
43  $this->resourceConnection = $resourceConnection;
44  }
45 
51  private function getConnection()
52  {
53  if (!$this->connection) {
54  $this->connection = $this->resourceConnection->getConnection();
55  }
56  return $this->connection;
57  }
58 
66  public function getColumns(SelectBuilder $selectBuilder, $entityConfig)
67  {
68  if (!isset($entityConfig['attribute'])) {
69  return [];
70  }
71  $group = [];
72  $columns = $selectBuilder->getColumns();
73  foreach ($entityConfig['attribute'] as $attributeData) {
74  $columnAlias = $this->nameResolver->getAlias($attributeData);
75  $tableAlias = $this->nameResolver->getAlias($entityConfig);
76  $columnName = $this->nameResolver->getName($attributeData);
77  if (isset($attributeData['function'])) {
78  $prefix = '';
79  if (isset($attributeData['distinct']) && $attributeData['distinct'] == true) {
80  $prefix = ' DISTINCT ';
81  }
82  $expression = new ColumnValueExpression(
83  strtoupper($attributeData['function']) . '(' . $prefix
84  . $this->getConnection()->quoteIdentifier($tableAlias . '.' . $columnName)
85  . ')'
86  );
87  } else {
88  $expression = $tableAlias . '.' . $columnName;
89  }
90  $columns[$columnAlias] = $expression;
91  if (isset($attributeData['group'])) {
92  $group[$columnAlias] = $expression;
93  }
94  }
95  $selectBuilder->setGroup(array_merge($selectBuilder->getGroup(), $group));
96  return $columns;
97  }
98 }
$group
Definition: sections.phtml:16
$columns
Definition: default.phtml:15
$prefix
Definition: name.phtml:25
__construct(NameResolver $nameResolver, ResourceConnection $resourceConnection)
getColumns(SelectBuilder $selectBuilder, $entityConfig)