Bonjour,
Je suis débutant sur symfony et ai encore un peu de mal.
Surêment quelque chose de très simple à vos yeux !

Voici mon erreur : Return value of App\Repository\ArticlesRepository::findByReference() must be an instance of App\Entity\Articles or null, array returned
Erreur qui est sur ma requete sql donc probleme de syntaxe peut-être.

Mon but étant de faire un <select> avec plusieurs options (nom de colonne), un champ pour rechercher ce qu'on veut dans la colonne et bouton submit

Voici mon repository

public function findByReference($params): ?Articles
    {
        $qb =  $this->createQueryBuilder('a') 
            ->select()
            ->andWhere('a.categorie = :search')
            ->setParameter('search', $params['search'])
            ->getQuery();

            return $qb->execute();
        ;
    }

suivi de mon controller :

   /**
     * @Route("/reference", name="articles_reference", methods={"GET"})
     */
    public function indexReference(ArticlesRepository $articlesRepository,Request $request): Response
    {

         $search = $request->query->get('search');

         $params = [
             'search' => $search,
         ];
         dump($params);

        return $this->render('articles/index.html.twig', [
            'articles' => $articlesRepository->findByReference($params),
        ]);
    }

3 réponses


Bonjour.
Si tu regardes bien l'exemple de la documentation, tu verras qu'il y a une petite différence :

$qb = $this->createQueryBuilder('p')
        ->where('p.price > :price')
        ->setParameter('price', $price)
        ->orderBy('p.price', 'ASC');

$query = $qb->getQuery();

return $query->execute();

Comme tu peux le voir, le retour de la méthode getQuery est stocké dans une variable et c'est sur cette variable qu'est utilisé la méthode execute et non sur la variable initiale ($qb).
Au passage, si tu regardes la signature du retour dans la documentation, c'est bien un tableau qui est retourné et non une entité, ce qui en même temps est normal si tu récupères plusieurs enregistrements.
Par contre, fais attention, dans ton code de la méthode findByReference tu as un ; en trop à la fin.

Malgrés vos indications, la ligne

$query = $qb->getQuery();

Est souligner en rouge dans mon IDE, comme s'il y avait une ereur de syntaxe...

Bonjour.

Ce que te dit @Lartak, ce n'est pas tout a fait vrai... tu peux très bien écrire ta requête comme tu l'as fais...
Le problème vient du retour de ta méthode findByReference dans ton repository: au lieu de retourner un : ?Articles, tente plutôt un : array