Nous souhaitons maintenant ajouter des lieux pour indiquer où se déroulent les événements.
Entité et relation
En utilisant la commande make:entity
, créer une entité Venue
avec les propriétés suivantes:
Description | Nom | Type | Taille | Nullable |
---|---|---|---|---|
Nom du lieu | name |
string |
255 | ❌ |
Adresse du lieu | address |
string |
255 | ❌ |
Chaque événement doit se dérouler dans un lieu, il faut alors créer une relation entre les 2 entités, qui se traduira pour une contrainte de clé étrangère en base de données.
Sans quitter la commande, ajouter une propriété events
à l'entité Venue
, de type relation
, liée à la classe Event
:
Il nous est alors présenté une liste des relations possibles. Sélectionner OneToMany
afin qu'un lieu puisse avoir plusieurs événements et qu'un événement ne soit associé qu'à 1 lieu:
Afin que l'on puisse accéder à l'objet Venue
depuis une entité Event
, une propriété sera également ajoutée dans Event
. On peut choisir le nom de cette propriété, qui est suggérée par défaut à venue
(visible entre crochets). Laisser vide pour sélectionner la valeur par défaut:
Dans le cas où un événement pourrait ne pas avoir de lieu, on doit indiquer la nullabilité de la propriété. On autorisera les événements à ne pas avoir de lieu:
Enfin, il nous est proposé l'activation de l'orphanRemoval
pour automatiquement supprimer les événements qui seraient dissociés d'un lieu. Comme il est indiqué dans la "note", c'est à éviter si un événement peut changer de lieu. On laissera désactivé:
Migration et Fixtures
Comme après chaque modification de nos entités, il est nécessaire de mettre à jour la base de données en utilisant une migration:
Une fois la structure de la base mise à jour, on peut s'occuper des fixtures. Créer un fichier /fixtures/venue.yaml:
Les lieux seront identifiés de venue_1
à venue_10
, que l'on va pouvoir référencer automatiquement et de manière aléatoire dans /fixtures/event.yaml avec la syntaxe @reference
:
On recharge complètement les données:
Template
Pour terminer, modifier le template /templates/_includes/event_card.html.twig pour y ajouter les informations sur le lieu. Si aucun lieu n'est précisé, on affichera "Lieu secret":