src/Repository/City/CityRepository.php line 112

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 getByName(string $name): City
  51.     {
  52.         $qb $this->createQueryBuilder('city');
  53.         $expr $qb->expr();
  54.         $city $qb
  55.             ->andWhere($expr->eq('city.name'':name'))
  56.             ->setParameter('name'$name)
  57.             ->getQuery()
  58.             ->getOneOrNullResult();
  59.         if (!$city instanceof City) {
  60.             throw new CityNotFoundException();
  61.         }
  62.         return $city;
  63.     }
  64.     public function findActiveNearestCity(string $latitudestring $longitude): ?City
  65.     {
  66.         $qb $this->createQueryBuilder('city');
  67.         $expr $qb->expr();
  68.         return $qb
  69.             ->andWhere($expr->eq('city.active'':active'))
  70.             ->addOrderBy($expr->min(
  71.                 \sprintf('ST_Distance(city.point, GeomFromEWKT(\'SRID=4326;POINT(%s)\'))', \implode(' ', [$latitude$longitude])))
  72.             )
  73.             ->addGroupBy('city.ID')
  74.             ->setParameters([
  75.                 'active' => true,
  76.             ])
  77.             ->setMaxResults(1)
  78.             ->getQuery()
  79.             ->getOneOrNullResult();
  80.     }
  81.     public function findAllSortByName(): array
  82.     {
  83.         $qb $this->createQueryBuilder('c');
  84.         $expr $qb->expr();
  85.         
  86.         return $qb
  87.             ->andWhere($expr->eq('c.active'':active'))
  88.             ->setParameter('active'true)
  89.             ->addOrderBy($expr->asc('c.name'))
  90.             ->getQuery()
  91.             ->getResult();
  92.     }
  93.     public function findActiveByDomain(string $domain): ?City
  94.     {
  95.         $queryBuilder $this->createQueryBuilder('city');
  96.         $expr $queryBuilder->expr();
  97.         return $queryBuilder
  98.             ->andWhere($expr->eq('city.active'':active'))
  99.             ->andWhere($expr->eq('city.domain'':domain'))
  100.             ->setParameters(
  101.                 [
  102.                     'active' => true,
  103.                     'domain' => $domain,
  104.                 ]
  105.             )
  106.             ->setMaxResults(1)
  107.             ->getQuery()
  108.             ->getOneOrNullResult();
  109.     }
  110. }