[Symfony 5.4] utiliser un repository dans un service
Bonjour à tous,
J'ai besoin de votre aide pour utiliser un repository dans un service, j'ai cherché dans tous les sens, je ne trouve que des infos pas claires sur d'anciennes versions.
Je cherche à faire au plus simple, d'après ce que je vois, avec Symfony 5.4, on n'a plus besoin de modifier config.yaml
J'ai une entité Prestation, qui contient quelques champs : nom, priorité...
En mettant ma requête directement dans mon service, que j'appelle à partir de mon controller, ça marche nickel :
Service : AlimenterPrestations.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class AlimenterPrestations
{
private $entitymanager;
protected $request_stack;
public function __construct(EntityManagerInterface $entitymanager, RequestStack $request_stack)
{
$this->entitymanager = $entitymanager;
$this->request = $request_stack->getCurrentRequest();
}
public function alimenterPrestationsCreation()
{
// afficher la liste des prestations
$qb = $this->entitymanager->createQueryBuilder();
$qb->select(array('pr'))
->from('App:Prestation', 'pr')
->orderBy('pr.priorite', 'ASC');
$q = $qb->getQuery();
$liste_prestation = $q->getResult();
//...
}
} |
Maintenant je veux factoriser mon code et mettre toutes les requêtes dans PrestationRepository.
Repository : PrestationRepository.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class PrestationRepository extends ServiceEntityRepository
{
private $params;
private $paginator;
public function __construct(ParameterBagInterface $params, ManagerRegistry $registry, PaginatorInterface $paginator)
{
$this->params = $params;
$this->paginator = $paginator;
parent::__construct($registry, Prestation::class);
}
public function SelectPrestationsListePriorite(): array
{
$queryBuilder = $this->createQueryBuilder('prestation')
->orderBy('prestation.priorite', 'ASC');
$query = $queryBuilder->getQuery();
return $query->getResult();
}
} |
Et je modifie mon service comme suit :
Service : AlimenterPrestations.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class AlimenterPrestations
{
private $entitymanager;
protected $request_stack;
public function __construct(EntityManagerInterface $entitymanager, RequestStack $request_stack)
{
$this->entitymanager = $entitymanager;
$this->request = $request_stack->getCurrentRequest();
}
public function alimenterPrestationsCreation()
{
$liste_prestation = $this->entitymanager->getRepository(Prestation::class)->SelectPrestationsListePriorite();
//...
} |
Et là, j'ai l'erreur :
Citation:
Undefined method "SelectPrestationsListePriorite". The method name must start with either findBy, findOneBy or countBy!
On ne peut pas donner le nom qu'on veut aux fonctions ?
Et je ne peux pas juste faire un findAll avec un tri ? Je ne vois pas où ça cloche...
Merci d'avance pour votre aide !