Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
QueryFactory.php
Go to the documentation of this file.
1 <?php
7 
11 
17 {
21  private $config;
22 
26  private $selectBuilderFactory;
27 
31  private $assemblers;
32 
36  private $queryCache;
37 
41  private $objectManager;
42 
46  private $selectHydrator;
47 
58  public function __construct(
59  CacheInterface $queryCache,
60  SelectHydrator $selectHydrator,
61  ObjectManagerInterface $objectManager,
62  SelectBuilderFactory $selectBuilderFactory,
63  Config $config,
64  array $assemblers
65  ) {
66  $this->config = $config;
67  $this->selectBuilderFactory = $selectBuilderFactory;
68  $this->assemblers = $assemblers;
69  $this->queryCache = $queryCache;
70  $this->objectManager = $objectManager;
71  $this->selectHydrator = $selectHydrator;
72  }
73 
80  private function getQueryConnectionName($queryConfig)
81  {
82  $connectionName = 'default';
83  if (isset($queryConfig['connection'])) {
84  $connectionName = $queryConfig['connection'];
85  }
86  return $connectionName;
87  }
88 
95  private function constructQuery($queryName)
96  {
97  $queryConfig = $this->config->get($queryName);
98  $selectBuilder = $this->selectBuilderFactory->create();
99  $selectBuilder->setConnectionName($this->getQueryConnectionName($queryConfig));
100  foreach ($this->assemblers as $assembler) {
101  $selectBuilder = $assembler->assemble($selectBuilder, $queryConfig);
102  }
103  $select = $selectBuilder->create();
104  return $this->objectManager->create(
105  Query::class,
106  [
107  'select' => $select,
108  'selectHydrator' => $this->selectHydrator,
109  'connectionName' => $selectBuilder->getConnectionName(),
110  'config' => $queryConfig
111  ]
112  );
113  }
114 
121  public function create($queryName)
122  {
123  $cached = $this->queryCache->load($queryName);
124  if ($cached) {
125  $queryData = json_decode($cached, true);
126  return $this->objectManager->create(
127  Query::class,
128  [
129  'select' => $this->selectHydrator->recreate($queryData['select_parts']),
130  'selectHydrator' => $this->selectHydrator,
131  'connectionName' => $queryData['connectionName'],
132  'config' => $queryData['config']
133  ]
134  );
135  }
136  $query = $this->constructQuery($queryName);
137  $this->queryCache->save(json_encode($query), $queryName);
138  return $query;
139  }
140 }
$objectManager
Definition: bootstrap.php:17
$config
Definition: fraud_order.php:17
__construct(CacheInterface $queryCache, SelectHydrator $selectHydrator, ObjectManagerInterface $objectManager, SelectBuilderFactory $selectBuilderFactory, Config $config, array $assemblers)