<?php
namespace App\Repository;
use App\Entity\Advertiser;
use App\Traits\Paginate;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\Tools\Pagination\Paginator;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* @method Advertiser|null find($id, $lockMode = null, $lockVersion = null)
* @method Advertiser|null findOneBy(array $criteria, array $orderBy = null)
* @method Advertiser[] findAll()
* @method Advertiser[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class AdvertiserRepository extends ServiceEntityRepository
{
use Paginate;
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Advertiser::class);
}
/**
* @deprecated
* @return Advertiser
*/
public function findBySubdomain(mixed $subdomain)
{
return $this->findOneBySubdomain($subdomain);
}
public function findOneBySubdomain(string $subdomain): ?Advertiser
{
return $this->findOneBy([
'subdomain' => $subdomain,
]);
}
public function findByPageAndFilter($page = 1, $max = 50, $name = null)
{
if (null === $max) {
$max = 50;
}
$dql = $this->createQueryBuilder('a');
if (null !== $name && '' !== $name) {
$dql->andWhere('a.title LIKE :title');
$dql->setParameter('title', '%' . $name . '%');
}
$firstResult = ($page - 1) * $max;
$query = $dql->getQuery();
$query->setFirstResult($firstResult);
$query->setMaxResults($max);
$paginator = new Paginator($query);
if (($paginator->count() <= $firstResult) && 1 !== $page) {
throw new NotFoundHttpException('Page not found');
}
return $paginator;
}
}