Symfony запрос knp_paginator с помощью $ _GET - PullRequest
0 голосов
/ 04 августа 2020

Я новичок и пытаюсь написать запрос для ввода поиска, используя kpn_paginator, но получаю сообщение об ошибке:

Один из слушателей должен подсчитать и разрезать заданную цель

Я не могу найти решение, я проверил некоторые другие топи c, но не могу понять, как это сделать в моем коде.

Мои остальные работают хорошо, но мои, если нет.

Когда я пытаюсь изменить свой запрос (-> getOneOrNullResult) на (-> getResult), я получаю следующую ошибку:

Возвращаемое значение App \ Repository \ ArticleRepository :: findByName () должно быть экземпляр App \ Entity \ Article или null, возвращается массив

Если вы можете мне помочь, большое спасибо.

index. html .twig

<div class="search">
 <form action="" method="get" >
  <input type="text" name="recherche" placeholder="Titre">
  <button type="submit" class="btn btn-primary btn-sm">Recherche</button>
  </form>
</div>

Контроллер. php

/**
     * @Route("/", name="admin_article_index", methods={"GET"})
     */
    public function index(ArticleRepository $articleRepository, PaginatorInterface $paginator, Request $request): Response
    {
        $this->articleRepository = $articleRepository;
        
       $recherche = [];
        
        if (isset($_GET['recherche'])) {
            $recherche = htmlspecialchars($_GET['recherche']);
            
           
            $article = $paginator->paginate(
                $this->articleRepository->findByName($recherche),
                $request->query->getInt('page', 1),
                2
            );
        }else {
            $article = $paginator->paginate(
                $this->articleRepository->findAllArticleQuery(),
                $request->query->getInt('page', 1),
                2
            );
        }
        return $this->render('admin/article/index.html.twig', [
            'articles' => $article,
            
            
        ]);
    }

Репозиторий статей. php

public function findByName($recherche): ?Article
    {
        return $this->createQueryBuilder('a')
            ->andWhere('a.title = :val')
            ->setParameter('val', $recherche)
            ->getQuery()
            ->getOneOrNullResult()
        ;
    }

1 Ответ

0 голосов
/ 31 августа 2020

Необходимо добавить присоединение:

/**
 * @return Query
 */
public function findVilleArticleQuery($search)
{
    $query = $this->findArticleQuery();

    if ($search = $_GET["villesearch"]){
        $query = $query
        ->join('a.localiser', 'l')
        ->where('l.town LIKE :ville')
        ->setParameter('ville', '%' . $search . '%' )
        ;
    }

    return $query->getQuery();
}
private function findArticleQuery()
{
    return $this->createQueryBuilder('a')
    ->orderby('a.created_at','DESC');
    
}
...