<?php
namespace App\Repository;
use App\Entity\AffiliateRequest;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Criteria;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Query;
use Doctrine\ORM\Query\Parameter;
use Doctrine\Persistence\ManagerRegistry;
use Pagerfanta\Doctrine\ORM\QueryAdapter;
use Pagerfanta\Pagerfanta;
/**
* @extends ServiceEntityRepository<AffiliateRequest>
*
* @method AffiliateRequest|null find($id, $lockMode = null, $lockVersion = null)
* @method AffiliateRequest|null findOneBy(array $criteria, array $orderBy = null)
* @method AffiliateRequest[] findAll()
* @method AffiliateRequest[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class AffiliateRequestRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, AffiliateRequest::class);
}
public function add(AffiliateRequest $entity, bool $flush = false): void
{
$this->getEntityManager()->persist($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
public function remove(AffiliateRequest $entity, bool $flush = false): void
{
$this->getEntityManager()->remove($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
public function getResults(string $query = null, int $page = 1, int $limit = 20): Pagerfanta
{
$qb = $this->createQueryBuilder('ar');
if ($query) {
$qb->andWhere($qb->expr()->orX(
$qb->expr()->like('ar.firstname', ':query'),
$qb->expr()->like('ar.lastname', ':query'),
$qb->expr()->like('ar.email', ':query'),
$qb->expr()->like('ar.phone', ':query'),
$qb->expr()->like('ar.city', ':query'),
))->setParameters(new ArrayCollection([
new Parameter('query', '%'.$query.'%'),
]));
}
$qb->orderBy('ar.createdAt', Criteria::DESC);
$paginator = new Pagerfanta(new QueryAdapter($qb));
$paginator
->setMaxPerPage($limit)
->setCurrentPage($page);
return $paginator;
}
public function getExportQuery(\DateTime $dateBegin, \DateTime $dateEnd): Query
{
$qb = $this->createQueryBuilder('ar');
$qb->andWhere($qb->expr()->andX(
$qb->expr()->gte('ar.createdAt', ':date_begin'),
$qb->expr()->lte('ar.createdAt', ':date_end'),
))->setParameters(new ArrayCollection([
new Parameter('date_begin', $dateBegin, Types::DATETIME_MUTABLE),
new Parameter('date_end', $dateEnd, Types::DATETIME_MUTABLE),
]));
$qb->orderBy('ar.createdAt', Criteria::ASC);
return $qb->getQuery();
}
}