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.