Репозиторий:
Код: Выделить всё
public function findAllLimit(int $page, $onglet, $filtre = "", array $auts = [], int $limit = 25):array
{
$tirage = ['tirage', 'tirages-anciens'];
$objets = ['objet', 'jeu', 'figurine'];
$result = []; $listId = [];
$query = $this->createQueryBuilder('p')
->leftJoin('p.auteurs', 'a')
->leftJoin('p.dessinateurs', 'd')
->innerJoin('p.editeur', 'e')
->innerJoin('p.serie', 's')
->innerJoin('p.paratype', 't')
->andWhere('p.active = :etat')
->setParameter('etat', true);
if($filtre != ""){
$query->andWhere('p.parabd_titre LIKE :f OR a.nom LIKE :f OR a.prenom LIKE :f OR d.nom LIKE :f OR d.prenom LIKE :f OR e.nom LIKE :f')
->setParameter('f', "%".$filtre."%");
}
if($onglet == 'tintin'){
$query->andWhere("s.nom = 'tintin'");
} elseif($onglet == 'affiche'){
$query->andWhere("s.nom != 'tintin'")
->andWhere("t.nom = 'affiche' ");
} elseif($onglet == 'tirages'){
$query->andWhere("s.nom != 'tintin'")
->andWhere("t.nom IN (:tirage) ")
->setParameter('tirage', $tirage);
} elseif($onglet == 'objets'){
$query->andWhere("s.nom != 'tintin'")
->andWhere("t.nom IN (:objet) ")
->setParameter('objet', $objets);
} elseif($onglet != '') {
$query->andWhere("s.nom != 'tintin'")
->andWhere('t.nom = :type ')
->setParameter('type', $onglet);
}
if(count($auts) > 0) {
foreach($auts as $a) { array_push($listId, $a->getId()); }
$query->andWhere('a.id IN (:ids) OR d.id IN (:ids)')
->setParameter('ids', $listId);
}
$query->orderBy('p.position', 'ASC')
->setMaxResults($limit)
->setFirstResult($page * $limit - $limit);
$paginator = new Paginator($query);
// dd($paginator->getQuery()->getSQL());
$data = $paginator->getQuery()->getResult();
// dd($paginator->count());
if(empty($data)) { //retourne tableau vide pour éviter les erreurs 500
$result['data'] = [];
$result['pages'] = 0;
return $result;
}
//Calcul nb de pages
$pages = ceil($paginator->count() / $limit);
$result['data'] = $data;
$result['pages'] = $pages;
$result['page'] = $page;
$result['limit'] = $limit;
return $result;
}
Код: Выделить всё
{% block body %}
Ex-Libris
{% set path = 'lib_xl' %}
{% set pages = liste.pages %}
{% set currentPage = liste.page %}
{% set haveFilter = true %}
{% set filtre = nomFilt %}
{% set btnList = true %}
{% include "_partials/_pagination.html.twig" %}
{% set n = 0 %}
{% for l in liste.data %}
{% set n = n+1 %}
{{ l.etatLibris.libelle|upper }}
{{ l.livre }} [/b]
{% set i = 0 %}{% set n = l.dessinateurs|length + l.auteurs|length %} {% for a in l.dessinateurs %}{% set i = i+1 %} {{ a.prenom }} {{a.nom}}{% if i > n-1 %} {% elseif i == n - 1 %} et {% else %}, {% endif %} {% endfor %}
{% for a in l.auteurs %}{% set i = i+1 %} {{ a.prenom }} {{a.nom}}{% if i > n-1 %} {% elseif i == n - 1 %} et {% else %}, {% endif %} {% endfor %}
[img]{{ asset([/img]
paru aux éditions {{ l.editeur.nom }}
en {{ l.date|format_datetime(pattern='MMMM yyyy', locale='fr') }}
{{ l.commentaire }}
[list]{% for bd in l.bdconcernes %}
[*][url={{ bd.lien }}]{{ bd.nombd }}[/url]
{% endfor %}
[/list]
{% endfor %}
{% include "_partials/_pagination.html.twig" %}
Дело в том, что у меня есть 18 объектов, которые должны отображаться (SQL и Paginator дают 18 объектов), но только 14 встали. Почему?
Изменить: проблема устранена добавлением ->select('DISTINCT p') после '$this->createQueryBuilder('p')'. Спасибо Джулиану Костеру!
Подробнее здесь: https://stackoverflow.com/questions/793 ... -paginator