diff --git a/Classes/Domain/Repository/CompanyRepository.php b/Classes/Domain/Repository/CompanyRepository.php index 86ea052540c0daa29a3b8ab7bbedaf8025293e3f..a44f842c1704a6760da9f84882d5fe5879cc1d4d 100644 --- a/Classes/Domain/Repository/CompanyRepository.php +++ b/Classes/Domain/Repository/CompanyRepository.php @@ -1,7 +1,5 @@ <?php -namespace SGalinski\SgJobs\Domain\Repository; - /*************************************************************** * Copyright notice * @@ -26,6 +24,8 @@ namespace SGalinski\SgJobs\Domain\Repository; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ +namespace SGalinski\SgJobs\Domain\Repository; + use SGalinski\SgJobs\Domain\Model\Company; use TYPO3\CMS\Core\Context\Context; use TYPO3\CMS\Core\Context\Exception\AspectNotFoundException; @@ -38,15 +38,17 @@ use TYPO3\CMS\Extbase\Persistence\Repository; * Company Repository */ class CompanyRepository extends Repository { + /** @var array */ + protected $cache = []; + /** * initializes the object */ public function initializeObject(): void { - $querySettings = $this->createQuery()->getQuerySettings(); - $querySettings->setRespectStoragePage(FALSE); - $querySettings->setIgnoreEnableFields(TRUE); - $querySettings->setEnableFieldsToBeIgnored(['disabled']); - $this->setDefaultQuerySettings($querySettings); +// $querySettings = $this->createQuery()->getQuerySettings(); +// $querySettings->setRespectStoragePage(FALSE); +// $querySettings->setIgnoreEnableFields(TRUE); +// $this->setDefaultQuerySettings($querySettings); } /** @@ -130,34 +132,36 @@ class CompanyRepository extends Repository { * @throws AspectNotFoundException */ public function getAllCompanies(int $pageUid, array $filters = []) { - $companyConstraints = []; - $query = $this->createQuery(); - $querySettings = $query->getQuerySettings(); - $querySettings->setStoragePageIds([$pageUid]); - $querySettings->setLanguageUid( - GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('language', 'id', 0) - ); - - $query->setQuerySettings($querySettings); - - $query->setOrderings( - [ - 'sorting' => QueryInterface::ORDER_ASCENDING, - ] - ); - - $companyConstraints[] = $query->equals('pid', $pageUid); - - if (count($filters) > 0) { - $constraints = []; - foreach ($filters as $filter) { - $constraints[] = $query->equals('uid', $filter); + $hash = $pageUid . '_' . implode('-', $filters); + if (!isset($this->cache[$hash])) { + $companyConstraints = []; + $query = $this->createQuery(); + $querySettings = $query->getQuerySettings(); + $querySettings->setStoragePageIds([$pageUid]); + $querySettings->setLanguageUid( + GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('language', 'id', 0) + ); + $query->setQuerySettings($querySettings); + + $query->setOrderings( + [ + 'sorting' => QueryInterface::ORDER_ASCENDING, + ] + ); + + $companyConstraints[] = $query->equals('pid', $pageUid); + if (count($filters) > 0) { + $constraints = []; + foreach ($filters as $filter) { + $constraints[] = $query->equals('uid', $filter); + } + $companyConstraints[] = $query->logicalOr($constraints); } - $companyConstraints[] = $query->logicalOr($constraints); - } - $query->matching($query->logicalAnd($companyConstraints)); + $query->matching($query->logicalAnd($companyConstraints)); + $this->cache[$hash] = $query->execute(); + } - return $query->execute(); + return $this->cache[$hash]; } }