<?php
namespace App\Repository\Admin;
use App\Data\RechercheDonnees;
use App\Entity\Admin\Page;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Knp\Component\Pager\Pagination\PaginationInterface;
use Knp\Component\Pager\PaginatorInterface;
/**
* @method Page|null find($id, $lockMode = null, $lockVersion = null)
* @method Page|null findOneBy(array $criteria, array $orderBy = null)
* @method Page[] findAll()
* @method Page[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class PageRepository extends ServiceEntityRepository
{
private $paginator;
public function __construct(ManagerRegistry $registry, PaginatorInterface $paginator)
{
parent::__construct($registry, Page::class);
$this->paginator = $paginator;
}
public function findByMenu($parametremenu): ?Page
{
$query = $this->createQueryBuilder('p');
$query = $query
->andWhere('p.parametremenu LIKE :parametremenu')
->setParameter('parametremenu', '%'.$parametremenu.'%')
;
return $query->getQuery()
->getOneOrNullResult()
;
}
public function findByNombreClick()
{
return $this->createQueryBuilder('pg')
->orderBy('pg.nombreClick', 'DESC')
->andWhere('pg.nombreClick != 0')
->setMaxResults(6)
->getQuery()
->getResult()
;
}
/**
* Récupère les pages; theme; et autre en lien avec la recherche
* @return PaginationInterface
*/
public function findSearch(RechercheDonnees $search): PaginationInterface
{
$query = $this
->createQueryBuilder('p')
->orderBy('p.id', 'DESC')
->setParameter('today', new \DateTime())
;
if (! empty($search->q)){
$query = $query
->where('p.designation LIKE :search')
->orWhere('p.titrePage LIKE :search')
->setParameter('q', "%{$search->q}%");
}
$query = $query->getQuery();
return $this->paginator->paginate(
$query,
$search->page,
12
);
}
}