Aller au contenu principal

Lire des données de la BD

Comment récupérer des données de la base de données avec le Repository

Notions théoriques

Dans Symfony avec Doctrine, un repository est une classe contenant des méthodes pour récupérer des entités de la base de données.

info

Symfony crée automatiquement un repository pour chaque entité, que vous pouvez étendre pour ajouter vos propres méthodes de récupération.

Les principales méthodes pour récupérer des entités sont :

  • find,
  • findOneBy,
  • findBy,
  • et findAll.
astuce

Vous pouvez créer des méthodes personnalisées dans le repository pour des requêtes plus spécifiques.

Exemple de mise en application

Voici un exemple d'utilisation du repository dans Symfony 7 pour récupérer tous les joueurs :

use App\Entity\Player;
use App\Repository\PlayerRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class GameController extends AbstractController
{
#[Route('/game', name: 'game')]
public function index(PlayerRepository $playerRepository): Response
{
$players = $playerRepository->findAll();

return $this->render('game/index.html.twig', [
'players' => $players,
]);
}
}

Etudions ce code

public function index(PlayerRepository $playerRepository): Response

Symfony 7 utilise l'injection de dépendances pour injecter directement le repository dans la méthode du contrôleur.

$players = $playerRepository->findAll();

Cette ligne récupère tous les enregistrements de la table liée à l'entité Player.

Test de mémorisation/compréhension


Comment injecte-t-on un repository dans un contrôleur Symfony 7 ?


Quelle méthode du repository permet de récupérer toutes les entités ?


Comment récupère-t-on une entité par son ID avec Doctrine dans Symfony 7 ?


Comment passe-t-on des données à une vue dans Symfony 7 ?


Quel est l'avantage d'utiliser l'injection de dépendances pour les repositories dans Symfony 7 ?


TP pour réfléchir et résoudre des problèmes

Votre défi pour aujourd'hui consiste à afficher tous les joueurs

Ajoutons une action à notre GameController pour afficher tous les joueurs dans Symfony 7.

Ensuite créez une action index qui récupère tous les joueurs de la base de données et les passe à la vue.

Une solution