src/Repository/City/CityRepository.php line 110

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\Repository\City;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\ORM\NonUniqueResultException;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Slivki\Entity\City;
  8. use Slivki\Exception\CityNotFoundException;
  9. final class CityRepository extends ServiceEntityRepository implements CityRepositoryInterface
  10. {
  11.     public function __construct(ManagerRegistry $registry)
  12.     {
  13.         parent::__construct($registryCity::class);
  14.     }
  15.     /**
  16.      * @return City[]
  17.      */
  18.     public function getActiveCities(): array
  19.     {
  20.         $qb $this->createQueryBuilder('city');
  21.         $expr $qb->expr();
  22.         return $qb
  23.             ->andWhere($expr->eq('city.active'':active'))
  24.             ->setParameter('active'true)
  25.             ->addOrderBy($expr->asc('city.position'))
  26.             ->addOrderBy($expr->asc('city.name'))
  27.             ->getQuery()
  28.             ->getResult();
  29.     }
  30.     public function findById(int $id): ?City
  31.     {
  32.         $qb $this->createQueryBuilder('c');
  33.         $expr $qb->expr();
  34.         return $qb
  35.             ->andWhere($expr->eq('c.ID'':id'))
  36.             ->setParameters([
  37.                 'id' => $id,
  38.             ])
  39.             ->getQuery()
  40.             ->getOneOrNullResult();
  41.     }
  42.     public function getById(int $id): City
  43.     {
  44.         $city $this->findById($id);
  45.         if (!$city instanceof City) {
  46.             throw new CityNotFoundException();
  47.         }
  48.         return $city;
  49.     }
  50.     public function findActiveNearestCity(string $latitudestring $longitude): ?City
  51.     {
  52.         $qb $this->createQueryBuilder('city');
  53.         $expr $qb->expr();
  54.         return $qb
  55.             ->andWhere($expr->eq('city.active'':active'))
  56.             ->addOrderBy($expr->min(
  57.                 \sprintf('ST_Distance(city.point, GeomFromEWKT(\'SRID=4326;POINT(%s)\'))', \implode(' ', [$latitude$longitude])))
  58.             )
  59.             ->addGroupBy('city.ID')
  60.             ->setParameters([
  61.                 'active' => true,
  62.             ])
  63.             ->setMaxResults(1)
  64.             ->getQuery()
  65.             ->getOneOrNullResult();
  66.     }
  67.     public function findAllSortByName(): array
  68.     {
  69.         $qb $this->createQueryBuilder('c');
  70.         $expr $qb->expr();
  71.         
  72.         return $qb
  73.             ->andWhere($expr->eq('c.active'':active'))
  74.             ->setParameter('active'true)
  75.             ->addOrderBy($expr->asc('c.name'))
  76.             ->getQuery()
  77.             ->getResult();
  78.     }
  79.     public function findActiveByDomain(string $domain): ?City
  80.     {
  81.         $queryBuilder $this->createQueryBuilder('city');
  82.         $expr $queryBuilder->expr();
  83.         return $queryBuilder
  84.             ->andWhere($expr->eq('city.active'':active'))
  85.             ->andWhere($expr->eq('city.domain'':domain'))
  86.             ->setParameters(
  87.                 [
  88.                     'active' => true,
  89.                     'domain' => $domain,
  90.                 ]
  91.             )
  92.             ->setMaxResults(1)
  93.             ->getQuery()
  94.             ->getOneOrNullResult();
  95.     }
  96. }