Просмотр исходного кода

add a query to find them all by an API get request

ksieren 2 лет назад
Родитель
Сommit
d4fc06540f
1 измененных файлов с 51 добавлено и 1 удалено
  1. 51 1
      Classes/Domain/Repository/TermRepository.php

+ 51 - 1
Classes/Domain/Repository/TermRepository.php

@@ -4,9 +4,10 @@
 
   namespace Meramo\Begriffmgt\Domain\Repository;
 
+  use TYPO3\CMS\Core\Database\ConnectionPool;
+  use TYPO3\CMS\Core\Utility\GeneralUtility;
   use TYPO3\CMS\Extbase\Persistence\QueryInterface;
   use TYPO3\CMS\Extbase\Persistence\Repository;
-  use TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings;
 
   class TermRepository extends Repository
   {
@@ -22,4 +23,53 @@
 
           return $query->execute();
       }
+
+      public function findAllTermsByTypeOrCategoryOrSimplyAll($typeTitle= null, $categoryTitle = null) {
+          $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_begriffmgt_domain_model_term');
+          $queryBuilder = $connection->createQueryBuilder();
+          $queryBuilder
+              ->select('term','type.title as type_title', 'category.title as category_title','url.title as url_title')
+              ->from('tx_begriffmgt_domain_model_term', 't')
+              ->leftJoin('t', 'tx_begriffmgt_domain_model_type', 'type', 't.type = type.uid')
+              ->leftJoin('t', 'tx_begriffmgt_domain_model_category', 'category', 't.category = category.uid')
+              ->leftJoin('t', 'tx_begriffmgt_domain_model_url', 'url', 't.url = url.uid');
+         if($typeTitle && $categoryTitle){
+             $queryBuilder
+                 ->where($queryBuilder->expr()->eq('type.title', $queryBuilder->createNamedParameter($typeTitle)))
+                 ->andWhere($queryBuilder->expr()->eq('category.title', $queryBuilder->createNamedParameter($categoryTitle)));
+         }
+          if(!$typeTitle && $categoryTitle){
+              $queryBuilder
+                  ->where($queryBuilder->expr()->eq('category.title', $queryBuilder->createNamedParameter($categoryTitle)));
+          }
+          if($typeTitle && !$categoryTitle){
+              $queryBuilder
+                  ->where($queryBuilder->expr()->eq('type.title', $queryBuilder->createNamedParameter($typeTitle)));
+          }
+          $results = $queryBuilder->execute();
+          if(!$typeTitle && !$categoryTitle){
+              $terms = $this->buildTermsEachToArray($results);
+          } else {
+              $terms = $this->buildTermsAggregatedToArray($results);
+          }
+          return $terms;
+      }
+
+      public function buildTermsEachToArray($results){
+          $terms = array();
+          foreach ($results as $res){
+              array_push($terms, ['type'=>$res['type_title'],'category'=>$res['category_title'],'term'=>$res['term'], 'url'=>$res['url_title']]);
+          }
+          return $terms;
+      }
+
+      public function buildTermsAggregatedToArray($results){
+          $terms = [];
+          $response = [];
+          foreach ($results as $res){
+              array_push($terms, $res['term']);
+          }
+          array_push($response, ['type'=>$res['type_title'],'category'=>$res['category_title'], 'terms'=>$terms, 'url'=>$res['url_title']]);
+          return $response;
+      }
   }