src/Repository/PrayerRepository.php line 144

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Prayer;
  4. use App\Service\StatutService;
  5. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  6. use Doctrine\ORM\Query\Expr\Orx;
  7. use Doctrine\ORM\QueryBuilder;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. /**
  10.  * @extends ServiceEntityRepository<Prayer>
  11.  *
  12.  * @method Prayer|null find($id, $lockMode = null, $lockVersion = null)
  13.  * @method Prayer|null findOneBy(array $criteria, array $orderBy = null)
  14.  * @method Prayer[]    findAll()
  15.  * @method Prayer[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  16.  */
  17. class PrayerRepository extends ServiceEntityRepository
  18. {
  19.     public function __construct(ManagerRegistry $registry)
  20.     {
  21.         parent::__construct($registryPrayer::class);
  22.     }
  23.     public function add(Prayer $entitybool $flush false): void
  24.     {
  25.         $this->getEntityManager()->persist($entity);
  26.         if ($flush) {
  27.             $this->getEntityManager()->flush();
  28.         }
  29.     }
  30.     public function remove(Prayer $entitybool $flush false): void
  31.     {
  32.         $this->getEntityManager()->remove($entity);
  33.         if ($flush) {
  34.             $this->getEntityManager()->flush();
  35.         }
  36.     }
  37. //    /**
  38. //     * @return Prayer[] Returns an array of Prayer objects
  39. //     */
  40. //    public function findByExampleField($value): array
  41. //    {
  42. //        return $this->createQueryBuilder('p')
  43. //            ->andWhere('p.exampleField = :val')
  44. //            ->setParameter('val', $value)
  45. //            ->orderBy('p.id', 'ASC')
  46. //            ->setMaxResults(10)
  47. //            ->getQuery()
  48. //            ->getResult()
  49. //        ;
  50. //    }
  51. //    public function findOneBySomeField($value): ?Prayer
  52. //    {
  53. //        return $this->createQueryBuilder('p')
  54. //            ->andWhere('p.exampleField = :val')
  55. //            ->setParameter('val', $value)
  56. //            ->getQuery()
  57. //            ->getOneOrNullResult()
  58. //        ;
  59. //    }
  60.     /**
  61.      * @return Prayer[] Returns an array of Prayer objects
  62.      */
  63.     public function findBySearchQueries(array $searchQueries): array
  64.     {
  65. //        $today = (new \DateTime("now"))->format('Y-m-d H:i:s');
  66.         $qb $this->createQueryBuilder('p');
  67.         $qb
  68.             ->leftJoin('p.prayings''prayings')
  69.             ->leftJoin('prayings.customer''prieurs')
  70.             ->orderBy('p.created''DESC')
  71.             ->andWhere("p.status =:status")
  72.             ->andWhere(self::checkTemporarily($qb))
  73.             ->setParameter('status'StatutService::PUBLISHED_VALUE);
  74.         $querySubject $queryCity $querySubjectDescription $queryValidatedAt null;
  75.         if (isset($searchQueries['subject']) and !empty($searchQueries['subject'])) {
  76.             $querySubject $qb->expr()->like('p.title'$qb->expr()->literal("%{$searchQueries['subject']}%"));
  77.             $querySubjectDescription $qb->expr()->like('p.description'$qb->expr()->literal("%{$searchQueries['subject']}%"));
  78.         }
  79.         if (is_array($searchQueries['validatedAt']) and count($searchQueries['validatedAt']) > 0){
  80.             if (isset($searchQueries['validatedAt']['before']) and isset($searchQueries['validatedAt']['after'])){
  81.                 $queryValidatedAt $qb->expr()->between(
  82.                     'p.validatedAt',
  83.                     $qb->expr()->literal($searchQueries['validatedAt']['before']),
  84.                     $qb->expr()->literal($searchQueries['validatedAt']['after'])
  85.                 );
  86.             }
  87.         }
  88.         $qb->andWhere($qb->expr()->orX(
  89.             $querySubject,
  90.             $querySubjectDescription,
  91.             $queryCity,
  92.             $queryValidatedAt
  93.         ));
  94.         return $qb->getQuery()
  95.             ->getResult();
  96.     }
  97.     public static function checkTemporarily(QueryBuilder $qb): Orx
  98.     {
  99.         return $qb->expr()->orX(
  100.             $qb->expr()->eq('p.isTemporarily'$qb->expr()->literal(false)),
  101.             $qb->expr()->andX(
  102.                 $qb->expr()->eq('p.isTemporarily'$qb->expr()->literal(true)),
  103.                 $qb->expr()->between(
  104.                     'NOW()',
  105.                     'p.datePublishStart',
  106.                     'p.datePublishEnd'
  107.                 )
  108.             )
  109.         );
  110.     }
  111.     /**
  112.      * @return Prayer[] Returns an array of Prayer objects
  113.      */
  114.     public function getLastPrayer(?int $limit 10): array
  115.     {
  116.         $qb $this->createQueryBuilder('p');
  117.         $qb->andWhere(self::checkTemporarily($qb))
  118.             ->andWhere("p.status =:status")
  119.             ->orderBy('p.created''DESC')
  120.             ->setParameter('status'StatutService::PUBLISHED_VALUE)
  121.             ->setMaxResults($limit)
  122.         ;
  123.         return $qb->getQuery()->getResult();
  124.     }
  125.     /**
  126.      * @return Prayer[] Returns an array of Prayer objects
  127.      */
  128.     public function findValidatedPray(): array
  129.     {
  130.         $qb $this->createQueryBuilder('p');
  131.         $expr $qb->expr();
  132.         $qb
  133.             ->andWhere($expr->andX(
  134.                 $expr->eq('p.status'$expr->literal(StatutService::PUBLISHED_VALUE)),
  135.                 $expr->between(
  136.                     'p.validatedAt',
  137.                     $expr->literal((new \DateTime('yesterday 12:00:00'))->format('Y-m-d H:i:s')),
  138.                     $expr->literal((new \DateTime('now'))->format('Y-m-d H:i:s'))
  139.                 )
  140.             ))
  141.             ->orderBy('p.created''DESC')
  142.         ;
  143.         return $qb->getQuery()->getResult();
  144.     }
  145. }