src/WebBundle/Repository/ReviewsCacheRepository.php line 94

Open in your IDE?
  1. <?php
  2. namespace WebBundle\Repository;
  3. use DateTime;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\ORM\NonUniqueResultException;
  6. use Doctrine\ORM\NoResultException;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use FlexApp\Constant\TimeConstant;
  9. use WebBundle\Entity\ReviewsCache;
  10. use WebBundle\Helper\App;
  11. use WebBundle\Traits\RepoTrait;
  12. class ReviewsCacheRepository extends ServiceEntityRepository
  13. {
  14.     use RepoTrait;
  15.     public function __construct(ManagerRegistry $registry)
  16.     {
  17.         parent::__construct($registryReviewsCache::class);
  18.     }
  19.     public function getReview(int $id): ?ReviewsCache
  20.     {
  21.         $q $this->createQueryBuilder('r')
  22.             ->select('r')
  23.             ->andWhere('r.id = :id')
  24.             ->setParameter('id'$id)
  25.             ->setMaxResults(1)
  26.             ->getQuery();
  27.         try {
  28.             return $q->getSingleResult();
  29.         } catch (NoResultException|NonUniqueResultException $e) {
  30.             return null;
  31.         }
  32.     }
  33.     /**
  34.      * @param DateTime $start
  35.      * @param DateTime|null $end
  36.      * @return array|null
  37.      */
  38.     public function getReviewsPeriod($start$end null): array
  39.     {
  40.         $q $this->createQueryBuilder('r')
  41.             ->select('r')
  42.             ->andWhere('r.date >= :start')
  43.             ->setParameter('start'$start->getTimestamp());
  44.         if ($end) {
  45.             $q->andWhere('r.date <= :end')
  46.                 ->setParameter('end'$end->getTimestamp());
  47.         }
  48.         $r $q->getQuery()->enableResultCache(TimeConstant::HOUR);
  49.         return $r->getArrayResult();
  50.     }
  51.     public function getReviews($param = []): array
  52.     {
  53.         $q $this->createQueryBuilder('r')
  54.             ->select('r')
  55.             ->andWhere("r.star IN(4,5)")
  56.             ->andWhere('r.id NOT IN(535,1271)');
  57.         if (App::getCurLocale() != 'ru') {
  58.             $q->andWhere('r.country != \'RU\'');
  59.         }
  60.         if (!empty($param['order'])) {
  61.             $q->orderBy($param['order']);
  62.         } else {
  63.             $q->orderBy('r.date''DESC');
  64.         }
  65.         if (!empty($param['limit'])) {
  66.             $q->setMaxResults($param['limit']);
  67.         }
  68.         if (!empty($param['start_with'])) {
  69.             $q->setFirstResult($param['start_with']);
  70.         }
  71.         if (!empty($param['lang'])) {
  72.             $q->andWhere('r.language = :lang')
  73.                 ->setParameter('lang'$param['lang']);
  74.         }
  75.         $r $q->getQuery()->enableResultCache(TimeConstant::HOUR);
  76.         return $r->getArrayResult();
  77.     }
  78.     /**
  79.      * @return int|null
  80.      */
  81.     public function getReviewsCount(): ?int
  82.     {
  83.         $q $this->createQueryBuilder('r')
  84.             ->select('count(r.id)')
  85.             ->andWhere("r.star IN(4,5)")
  86.             ->andWhere('r.id NOT IN(535,1271)');
  87.         if (App::getCurLocale() != 'ru') {
  88.             $q->andWhere('r.country != \'RU\'');
  89.         }
  90.         $r $q->getQuery()->enableResultCache(TimeConstant::HOUR);
  91.         try {
  92.             return $r->getSingleScalarResult();
  93.         } catch (NonUniqueResultException $e) {
  94.             return null;
  95.         }
  96.     }
  97. }