Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
JoinAssembler.php
Go to the documentation of this file.
1 <?php
8 
14 
19 {
23  private $conditionResolver;
24 
28  private $nameResolver;
29 
33  private $columnsResolver;
34 
38  private $resourceConnection;
39 
46  public function __construct(
47  ConditionResolver $conditionResolver,
48  ColumnsResolver $columnsResolver,
49  NameResolver $nameResolver,
50  ResourceConnection $resourceConnection
51  ) {
52  $this->conditionResolver = $conditionResolver;
53  $this->nameResolver = $nameResolver;
54  $this->columnsResolver = $columnsResolver;
55  $this->resourceConnection = $resourceConnection;
56  }
57 
65  public function assemble(SelectBuilder $selectBuilder, $queryConfig)
66  {
67  if (!isset($queryConfig['source']['link-source'])) {
68  return $selectBuilder;
69  }
70  $joins = [];
71  $filters = $selectBuilder->getFilters();
72 
73  $sourceAlias = $this->nameResolver->getAlias($queryConfig['source']);
74 
75  foreach ($queryConfig['source']['link-source'] as $join) {
76  $joinAlias = $this->nameResolver->getAlias($join);
77 
78  $joins[$joinAlias] = [
79  'link-type' => isset($join['link-type']) ? $join['link-type'] : 'left',
80  'table' => [
81  $joinAlias => $this->resourceConnection
82  ->getTableName($this->nameResolver->getName($join)),
83  ],
84  'condition' => $this->conditionResolver->getFilter(
85  $selectBuilder,
86  $join['using'],
87  $joinAlias,
88  $sourceAlias
89  )
90  ];
91  if (isset($join['filter'])) {
92  $filters = array_merge(
93  $filters,
94  [
95  $this->conditionResolver->getFilter(
96  $selectBuilder,
97  $join['filter'],
98  $joinAlias,
99  $sourceAlias
100  )
101  ]
102  );
103  }
104  $columns = $this->columnsResolver->getColumns($selectBuilder, isset($join['attribute']) ? $join : []);
105  $selectBuilder->setColumns(array_merge($selectBuilder->getColumns(), $columns));
106  }
107  $selectBuilder->setFilters($filters);
108  $selectBuilder->setJoins(array_merge($selectBuilder->getJoins(), $joins));
109  return $selectBuilder;
110  }
111 }
$columns
Definition: default.phtml:15
assemble(SelectBuilder $selectBuilder, $queryConfig)
$filters
Definition: uploader.phtml:11
__construct(ConditionResolver $conditionResolver, ColumnsResolver $columnsResolver, NameResolver $nameResolver, ResourceConnection $resourceConnection)