formations / symfony / entites-relations
Entités & relations
Les entités et les différents types de relation, OneToOne, OneToMany, ManyToOne, ManyToMany. Il est assez simple de déclarer des relations à l'aide de Doctrine et si jamais on est un peu perdu ou que l'on a un doute, le terminal nous offre un "wizard" qui peut s'avérer être de bon conseil.
Créer des relations
Bien, dans le tuto précédent on a vu comment faire un projet, créer une base de données et notre première entité.
Alors, suivant le MCD du cours précedent nous allons mettre en place l'entité Produit, puis nous allons mettre en place la relation entre les deux entités que sont Categorie et Produit.
Créer l'entité Produit
Pour créer l'entité Produit on procéde comme précédemment pour la Categorie. Dans le terminal on lance la commande
php bin/console make:entity
Ensuite on se laisse guider par les questions dans le terminal. Lorsqu'on renseigné toutes propriétés (nom et description à ce niveau). On peut valider la création de l'entité puis faire ce que l'on appelera une "migration" et un "migrate" pour mettre à jour la base de données par rapport au modèle.
Créer la relation
Nous avons maintenant les deux entités, Categorie et Produit. Pour faire la relation, nous allons nous référer au MCD. Il y a une relation de Categorie à Produit. Cette relation semblre être de One Categorie à Many Produit. On va relancer la commande make:entity, et ressaisir le nom Categorie, nous allons du coup être invité à mettre à jour l'entité puisqu'elle existe déjà.
On a donc déclaré le nom de l'entité Categorie, on a ensuite renseigné que l'on souhaite ajouter une propriété et qu'il s'agirat de produits et on spécifie bien un nom de propriété au pluriel car la categorie peut avoir plusieurs produits.
Pour ce qui est du type, on choisit relation ce qui va nous donner accès à un wizard dans le terminal nous permettant de valider notre choix avec une aide adaptée aux noms des deux entités concernées. Bien sûr si on connait par avance le type de relation il est tout à fait possible de le renseigner (OneToMany, ManyToOne, ManyToMany, OneToOne).
Le wizard illustre avec les noms de nos deux entités les relations disponibles.
ManyToOne : Chaque catégorie à un produit et un produit peut avoir plusieurs catégories.
OneToMany : Chaque catégorie peut avoir plusieurs produits et un produit à une catégorie.
ManyToMany : Chaque catégorie peut avoir plusieurs produits et un produits peut avoir plusieurs catégories.
OneToOne : Chaque catégorie ne peut avoir qu'un seul produit et un produit ne peut avoir qu'une seule catégorie.
Dans notre cas nous retenons donc OneToMany et il reste plus qu'à saisir cette relation dans le terminal, puis de répondre à un jeu de question (qui peut bien sûr varier suivant le type de relation retenue).
Le wizard nous propose d'ajouter une propriété nommée categorie dans Produit et nous allons valider car pour rappel, un produit ne peux avoir qu'une catégorie, nous validons donc le choix qui nous est proposé par défaut.
Il nous est ensuite demandé si la propriété categorie du produit peut-être null et nous allons dire que non. Dans notre cas de figure, un produit apparatient forcément à une catégorie.
Enfin il nous est demandé si nous souhaitons supprimer les "orphelins" ainsi si on supprime une catégorie, les produits associés devenant orphelins seront alors également supprimés en cascade.
Il ne nous reste plus qu'à effectuer une "migration" et un "migrate" et nous aurons créé notre premier relation entre deux entités et nous aurons mis à jour la base de données physique" par rapport au domaine.
php bin/console make:migration
php bin/console doctrine:migrations:migrate
Il est possible de vérifier dans la vue concepteur de PhpMyAdmin pour vérifier qu'une relation a bien été mise en place.
Voila nous venons de mettre en place une relation entre deux entités, nous aurons l'occasion dans faire d'autre. On peut maintenant se pencher sur les jeux de données. Symfony offre la fonctionnalité des fixtures permettant de créer des jeux de données à intégrer aisément et surtout à loisir dans la base de données pour faire différents tests du CRUD, comme la lecture, la modification ou encore la suppressions. Donc sans plus attendre les fixtures...
Tutos du jour
Les premiers pas en Php
Les premiers pas avec PHP, intégrer du php dans de l'html utiliser les fonctions de bases comme echo, include, etc.
Voir le tuto