26 private $selectBuilderFactory;
41 private $objectManager;
46 private $selectHydrator;
67 $this->selectBuilderFactory = $selectBuilderFactory;
68 $this->assemblers = $assemblers;
69 $this->queryCache = $queryCache;
71 $this->selectHydrator = $selectHydrator;
80 private function getQueryConnectionName($queryConfig)
82 $connectionName =
'default';
83 if (isset($queryConfig[
'connection'])) {
84 $connectionName = $queryConfig[
'connection'];
86 return $connectionName;
95 private function constructQuery($queryName)
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);
103 $select = $selectBuilder->create();
104 return $this->objectManager->create(
108 'selectHydrator' => $this->selectHydrator,
109 'connectionName' => $selectBuilder->getConnectionName(),
110 'config' => $queryConfig
123 $cached = $this->queryCache->load($queryName);
125 $queryData = json_decode($cached,
true);
126 return $this->objectManager->create(
129 'select' => $this->selectHydrator->recreate($queryData[
'select_parts']),
130 'selectHydrator' => $this->selectHydrator,
131 'connectionName' => $queryData[
'connectionName'],
132 'config' => $queryData[
'config']
136 $query = $this->constructQuery($queryName);
137 $this->queryCache->save(json_encode(
$query), $queryName);
__construct(CacheInterface $queryCache, SelectHydrator $selectHydrator, ObjectManagerInterface $objectManager, SelectBuilderFactory $selectBuilderFactory, Config $config, array $assemblers)