Activité : Doctrine & Relations Bis - SimplonReunion/developpeur-web GitHub Wiki

Objectif

Continuer à apprivoiser Doctrine en mettant en place un système de chambre d'hôtes.

Brief

M. Hoarau possède des gîtes un peu partout sur l'île. Il veut que les internautes puissent réserver les chambres directement sur Internet.

Il possède 5 gites pour l'instant mais compte en ouvrir encore quelques un. Chaque gîte possède un nombre de chambres différent et chaque chambre possède un nombre de place différent. De plus chaque gîte possède un hôte (un gestionnaire) différent.

Analyse

Après réflexion vous avez identifié les entités suivantes :

  • Gites qui possède les champs nom, adresse, tel, email. Un gîte peut avoir plusieurs chambres.
  • Chambres qui possède les champs nombrePlace, disponible, prix. Une chambre est liée à un seul gite.
  • Gestionnaire qui possède les champs nom, prenom, tel. Un gestionnaire est lié à un seul gite.
  • Client qui possède les champs nom,prenom,tel,email. Un client peut réserver plusieurs chambres.
  • Reservation qui possède les champs date, statut, paiement. Une réservation est faite par un Client pour une Chambre d'un gîte.

Déroulement

Création des entités

Nous allons commencer simplement. Faites un schéma afin de modéliser les relations entre les différentes entités. Je vous invite à utiliser UML avec une feuille et un crayon. Cela vous permettra définir plus facilement quel est le type de relation entre les entités (OneToMany, ManyToOne, ManyToMany ou OneToOne)

Tips : utilisez plutôt le diagramme de classe en dessinant les associations et leurs cardinalités.

Certains programmes (comme MySQL Workbench)vous permettent même de créer des diagrammes de classes et de les traduire en code SQL ! C'est surtout utile si, dans des projets, vous n'utilisez pas Doctrine.

Une fois que vous vu comment les entités sont liées. Vous pouvez commencer à les créer dans votre application Symfony.

Tips : Utilisez bin/console pour générer vos entités.

Une fois que les entités sont créées, n'oubliez pas de mettre à jour le schéma de votre base de données :

bin/console doctrine:schema:update

Tests d'insertion

Juste pour tester. Dans votre controller créer une action qui va créer 1 gite, 1 gestionnaire, 2 chambres, 1 client et 1 réservation.

Les créations

Vous vous en doutez, la façon d'insérer réalisée précédemment n'est pas très pratique.

Pour la suite, ,nous allons plutôt séparer la création des différents éléments de l'application.

Créer les controller suivants et ajoutez-y, à tous, l'action createAction :

  • GiteController
  • GestionnaireController
  • ChambreController
  • ClientController
  • ReservationController

Vous l'avez compris, pour chaque controller, l'action createAction va créer une entité selon le controller. Par exemple l'action createAction de GiteController va créer un gite, celle de ClientController va créer un client, etc.

Pour le moment n'utilisez pas les Formulaires !. Définissez vous-même les valeurs dans le code. C'est pas comme ça que l'on doit faire normalement, mais là on est toujours dans la prise en main de Doctrine.

À un moment, vous allez devoir récupérer des entités de la base de données. Pour faire cela, il faudra utiliser les repository. La documentation de Symfony explique assez bien la marche à suivre.

Aller plus loin

Il faut maintenant rendre tout ça un peu plus réaliste. Pour cela il faudra remplacer le code que vous utilisez pour créer les entités par des formulaires.