src/Repository/DepartementRepository.php line 86

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * Copyright (C) Office National de Publication et de Communication - All Rights Reserved
  5.  *
  6.  * Unauthorized copying of this file, via any medium is strictly prohibited by law
  7.  * This file is proprietary and confidential
  8.  */
  9. namespace App\Repository;
  10. use App\Entity\Ville;
  11. use App\Entity\Region;
  12. use App\Service\Tools;
  13. use Doctrine\ORM\Query;
  14. use App\Entity\Departement;
  15. use App\Common\LieuInterface;
  16. use App\Repository\Helper\CachedTrait;
  17. use Doctrine\Persistence\ManagerRegistry;
  18. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  19. /**
  20.  * @method null|Departement find($id, $lockMode = null, $lockVersion = null)
  21.  * @method null|Departement findOneBy(array $criteria, array $orderBy = null)
  22.  * @method Departement[]    findAll()
  23.  * @method Departement[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  24.  */
  25. final class DepartementRepository extends ServiceEntityRepository
  26. {
  27.     use CachedTrait;
  28.     private const CACHE_LIFETIME 60;
  29.     public function __construct(ManagerRegistry $registry)
  30.     {
  31.         parent::__construct($registryDepartement::class);
  32.     }
  33.     public function createQueryBuilder($alias$indexBy null)
  34.     {
  35.         return parent::createQueryBuilder($alias$indexBy)
  36.             ->leftJoin("${alias}.coordonnees"'coordonnees')
  37.             ->addSelect('coordonnees');
  38.     }
  39.     public function findRelatifsAuLieu(LieuInterface $lieustring $onglet null): array
  40.     {
  41.         $queryBuilder $this
  42.             ->createQueryBuilder('d')
  43.             ->orderBy('d.libelle''ASC');
  44.         // Force $lieu devenir une rĂ©gion
  45.         if ($lieu instanceof Ville) {
  46.             $lieu $lieu->getDepartement();
  47.         }
  48.         if ($lieu instanceof Departement) {
  49.             $lieu $lieu->getRegion();
  50.         }
  51.         if ($lieu instanceof Region) {
  52.             // $queryBuilder
  53.             //     ->leftJoin('d.ancienneRegion', 'ac')
  54.             //     ->andWhere($queryBuilder->expr()->eq('ac.region', ':region'))
  55.             //     ->setParameter('region', $lieu);
  56.             $queryBuilder
  57.                 ->andWhere($queryBuilder->expr()->eq('d.region'':region'))
  58.                 ->setParameter('region'$lieu);
  59.         }
  60.         if ($onglet && in_array($ongletTools::getOngletsList())) {
  61.             $queryBuilder
  62.                 ->andWhere($queryBuilder->expr()->like('d.onglets'':onglet'))
  63.                 ->setParameter('onglet'sprintf('%%%s%%'$onglet));
  64.         }        
  65.         return $queryBuilder
  66.             ->andWhere($queryBuilder->expr()->neq('d.id'':id'))
  67.             ->setParameter('id''BE')
  68.             ->getQuery()
  69.             ->setHint(Query::HINT_FORCE_PARTIAL_LOADtrue)
  70.             ->enableResultCache(3600)
  71.             ->getResult();
  72.     }
  73.     public function findAllByTerm(string $termint $max): array
  74.     {
  75.         $term trim($term);
  76.         if (empty($term)) {
  77.             return [];
  78.         }
  79.         $queryBuilder $this->createQueryBuilder('d');
  80.         return $queryBuilder
  81.             ->orderBy('d.libelle''ASC')
  82.             ->andWhere($queryBuilder->expr()->isNotNull('d.libelle'))
  83.             ->andWhere($queryBuilder->expr()->isNotNull('d.slug'))
  84.             ->andWhere(
  85.                 $queryBuilder->expr()->orX(
  86.                     $queryBuilder->expr()->like('d.libelle'':term'),
  87.                     $queryBuilder->expr()->like('d.id'':term')
  88.                 )
  89.             )
  90.             ->setParameter('term'$term.'%')
  91.             ->setMaxResults($max)
  92.             ->getQuery()
  93.             ->setHint(Query::HINT_FORCE_PARTIAL_LOADtrue)
  94.             ->useResultCache(trueself::CACHE_LIFETIME)
  95.             ->getResult();
  96.     }
  97.     public function getSlugs(): array
  98.     {
  99.         $list $this
  100.             ->createQueryBuilder('d')
  101.             ->select('d.slug')
  102.             ->getQuery()
  103.             ->getResult();
  104.         return array_map(static function ($value) {
  105.             return $value['slug'];
  106.         }, $list);
  107.     }
  108.     public function findAllByEtablissement(): array
  109.     {
  110.         $queryBuilder $this->createQueryBuilder('d');
  111.         return $queryBuilder
  112.             ->leftJoin('d.etablissements''e')
  113.             ->addOrderBy('d.libelle''ASC')
  114.             ->Where("e.departement IS NOT NULL")
  115.             ->getQuery()
  116.             ->setHint(Query::HINT_FORCE_PARTIAL_LOADtrue)
  117.             ->useResultCache(trueself::CACHE_LIFETIME)
  118.             ->getResult();
  119.     }
  120. }