Bruna veut afficher les ingrédients de chaque plat : les voyageurs ont des allergies, et le Piment de feu a déjà envoyé un nain à l'infirmerie. Pipin a commencé : l'entité Ingredient existe, et il a écrit la commande qui range le garde-manger, app:garnir-les-plats. Il ne reste qu'à relier tout ça.
Un plat contient plusieurs ingrédients, et un ingrédient (le Miel, la Farine…) entre dans plusieurs plats : c'est une relation plusieurs-à-plusieurs. En base, elle se range dans une table de jointure qui contient une ligne par couple plat-ingrédient.
Votre mission
- Reliez
PlatetIngredientdans les deux sens :$plat->getIngredients()et$ingredient->getPlats(). - La commande de Pipin part de l'ingrédient (
$ingredient->addPlat($plat)) : ce qu'elle range doit arriver en base. - Les ingrédients d'un plat arrivent par ordre alphabétique.
- Générez la migration, relisez-la, jouez-la, puis lancez
app:garnir-les-platsdans la console. - Sur la fiche d'un plat, affichez ses ingrédients dans une liste
<ul class="ingredients">, avec un<li>par ingrédient.
Qui décide ?
Dans une relation à double sens, Doctrine ne regarde qu'un seul côté pour écrire en base : le côté propriétaire. L'autre côté, le côté inverse (celui qui porte mappedBy), sert seulement à naviguer. Si on ne modifie que le côté inverse, les objets PHP ont l'air à jour, et pourtant rien n'est enregistré.