src/Repository/CityRepository.php line 36

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by simpson <simpsonwork@gmail.com>
  4.  * Date: 2019-03-19
  5.  * Time: 23:05
  6.  */
  7. namespace App\Repository;
  8. use App\Entity\Location\City;
  9. use App\Repository\ReadModel\CityReadModel;
  10. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  11. use Doctrine\Persistence\ManagerRegistry;
  12. class CityRepository extends ServiceEntityRepository
  13. {
  14.     use EntityIteratorTrait;
  15.     public function __construct(ManagerRegistry $registry)
  16.     {
  17.         parent::__construct($registryCity::class);
  18.     }
  19.     public function ofUriIdentity(string $uriIdentity): ?City
  20.     {
  21.         $qb $this->createQueryBuilder('city')
  22.             ->andWhere('city.uriIdentity = :uri')
  23.             ->setParameter('uri'$uriIdentity)
  24.             ->setMaxResults(1)
  25.         ;
  26.         $query $qb->getQuery()
  27.             ->useResultCache(true)
  28.             ->setResultCacheLifetime(3600)
  29.         ;
  30.         return  $query->getOneOrNullResult();
  31.     }
  32.     public function ofName(string $namestring $locale 'ru'): ?City
  33.     {
  34.         $qb $this->createQueryBuilder('city')
  35.             ->andWhere('JSON_EXTRACT(city.name, :json_path) = :name')
  36.             ->setParameter('json_path''$.'.$locale)
  37.             ->setParameter('name'$name)
  38.             ->setMaxResults(1)
  39.         ;
  40.         $query $qb->getQuery();
  41.         return $query->getOneOrNullResult();
  42.     }
  43.     public function cityCountries(): array
  44.     {
  45.         $qb $this->createQueryBuilder('city')
  46.             ->distinct(true)
  47.             ->select('city.countryCode')
  48.         ;
  49.         $query $qb->getQuery()
  50.             ->useResultCache(true)
  51.             ->setResultCacheLifetime(3600)
  52.         ;
  53.         $result $query->getScalarResult();
  54.         return array_column($result'countryCode');
  55.     }
  56.     public function getAll(): array
  57.     {
  58.         $qb $this->createQueryBuilder('city')
  59.             ->select('city.id, city.name, city.uriIdentity, city.countryCode')
  60.         ;
  61.         $result array_map(function($profile): CityReadModel {
  62.             return $this->hydrateCityRow($profile);
  63.         }, $qb->getQuery()->getResult());
  64.         return $result;
  65.     }
  66.     private function hydrateCityRow(array $row): CityReadModel
  67.     {
  68.         $view = new CityReadModel();
  69.         $view->id $row['id'];
  70.         $view->name $row['name'];
  71.         $view->uriIdentity $row['uriIdentity'];
  72.         $view->countryCode $row['countryCode'];
  73.         return $view;
  74.     }
  75. }