SF3 Undefined method dans le Repository

Par youstra, il y a 8 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Alors, avant de posté ce sujet, je tiens à signalé que j'ai fais le tour de quelques sujets du même genre mais ils proposent tous la même solution (vider le cache en ligne de commande, manuellement, avoir l'annotation @ORM\Entity(repositoryClass="monBundle\Repository\EntityRepository" dans son Entity).
J'ai essayé ses solutions mais... :(

Sujets vus:
1 - https://openclassrooms.com/forum/sujet/symfony-3-undefined-method-getadverts
2 - https://openclassrooms.com/forum/sujet/symfony-3-26
3 - https://openclassrooms.com/forum/sujet/symfony-2-repository-non-reconnu-29501 (Pour celui-ci, ce serait un bug au niveau de Symfony)
4 - https://zestedesavoir.com/forums/sujet/1352/foire-aux-questions-symfony/?page=2#p23300

Je vous donne mes codes
Le controller.php

<?php namespace ISIBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Request; use ISIBundle\Entity\Eleve; use ISIBundle\Repository\EleveRepository; use ISIBundle\Entity\Anneescolaire; use ISIBundle\Form\EleveType; use Doctrine\ORM\EntityRepository; class EleveController extends Controller { public function indexAction(Request $request, $as, $regime) { $repoEleve = $this->getDoctrine()->getManager()->getRepository('ISIBundle:Eleve'); $repo = get_class($repoEleve); if($regime === 'AC') { $eleves = $repoEleve->elevesAcademie(); } else { $eleves = $repoEleve->elevesCentreFormation(); } return $this->render('ISIBundle:Eleve:index.html.twig', array( 'asec' => $request->query->get('as'), 'eleves' => $eleves, 'regime' => $regime )); // return new Response($repo); } } ?>

Et là, le Repository.php

<?php namespace ISIBundle\Repository; use Doctrine\ORM\QueryBuilder; use ISIBundle\Repository; use ISIBundle\Entity\Eleve; use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityManagerInterface; class EleveRepository extends \Doctrine\ORM\EntityRepository { // Récuperation des élèves de l'académie public function elevesAcedemie() { // $elevesAcademie = $this->_em->createQuery('SELECT * FROM ISIBundle:Eleve e WHERE e.matricule LIKE '*A*''); $qb = $this->createQueryBuilder('e'); $qb->where('a.matricule LIKE LIKE '*A*''); // return $elevesAcademie->getResult(); return $qb->getQuery() ->getResult(); } // Récuperation des élèves du centre de formation public function elevesCentreFormation() { $elevesCentreFormation = $this->_em->createQuery(''); return $elevesCentreFormation->getResult(); } // Récupération du dernier matricule enregistré public function dernierMatricule() { $dernierMatricule = $this->_em->createQuery( 'SELECT MAX(DISTINCT(SUBSTRING(SUBSTRING(e.matricule, 1, LENGTH(e.matricule) - 4), 5))) AS plus_grand_matricule FROM ISIBundle:Eleve e'); return $dernierMatricule->getResult(); } } //MAX(DISTINCT(CAST(SUBSTRING(SUBSTRING(e.matricule, 1, LENGTH(e.matricule) - 4), 5) AS SIGNED INTEGER))) AS plus_grand_matricule ?>

Et enfin mon Entity.php

<?php namespace ISIBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Eleve * * @ORM\Table(name="eleve", indexes={@ORM\Index(name="contact_pere", columns={"contact_pere"}), @ORM\Index(name="contact_mere", columns={"contact_mere"}), @ORM\Index(name="contact", columns={"contact"})}) * @ORM\Entity(repositoryClass="ISIBundle\Repository\EleveRepository") * @ORM\HasLifecycleCallbacks() */ class Eleve { //l'entity fais plus de mille lignes, je ne présente donc que ça définition }

Ce que je veux

Je veux accéder à la méthode de mon Repository

Ce que j'obtiens

Voici le message que j'obtiens lorsque que je veux accéder à une méthode de mon répository:
Undefined method 'maMethodePersonnelle'. The method name must start with either findBy or findOneBy!

Avec tous ce code (qui a mon sens est bien écrit : le repositoryClass de l'entité bien défini, le Repository lui même dans monBundle\Repository, l'Entity dans monBundle\Entity) je ne comprends pas d'où vient cette erreur.

Pourriez-vous me proposer une solution

3 réponses

Bruno Rafael, il y a 8 ans

Est-ce que quelqu'un a une solution? je suis sur le même problème!!

youstra, il y a 8 ans

Mon problème est résolue.
Tu pourrais nous présenter ton code? Histoire de voir ce que tu fais.

Bruno Rafael, il y a 8 ans

@youstra j'ai résolu ce problème là, il me suffit de supprimer le dossier Doctrine qui a été généré lors du mapping. En tout cas, merci!