Chaque plat à sa place

Exercice 5 sur 6 du chapitre 2 · 200 XP · 5 objectifs vérifiés par des tests

Notions abordées : ManyToOneOneToManyRelations

Avec les inventions de Bruna, la carte s'allonge… et plus personne ne s'y retrouve : le Grog du capitaine se glisse entre deux ragoûts. Gorm veut une carte rangée par catégorie : plats de résistance, accompagnements, boissons.

Votre mission

  1. Mappez l'entité Categorie (table categorie) : un id généré, un nom unique (50 caractères), une position (l'ordre d'affichage sur la carte).
  2. Reliez les deux entités :
    • chaque plat appartient à une catégorie, obligatoirement ;
    • une catégorie connaît ses plats, du moins cher au plus cher.
  3. Rangez la carte : pour chaque catégorie (le contrôleur les passe déjà dans l'ordre de position), une <section class="categorie"> avec un <h2> et la liste <ul class="plats"> de ses plats.

Les propriétés et accesseurs sont écrits : à vous le mapping et le template. La carte filtrée par budget (?budget=) reste une simple liste.

La console

La commande de chargement échoue tant que Categorie n'est pas une entité : c'est normal. Une fois le mapping écrit, relancez :

doctrine:schema:update --force
app:charger-carte

Rappel

Dans une relation, le côté ManyToOne est le propriétaire : il porte la clé étrangère (categorie_id). Le côté OneToMany est le côté inverse : il existe pour la navigation (categorie.plats) et se déclare avec mappedBy.