Centre d'aide au développement d'applications web avec Symfony

Création d'une base de données Sql dans Symfony

Mis à jour le 16/01/2022

Configuration du fichier .env

A la racine d'un projet se trouve un fichier de configuration /.env dans lequel se trouvent des variables très utiles.
Celle qui nous intéresse aujourd'hui est la variable DATABASE_URL en fin de fichier.

Vous allez devoir commenter les trois lignes avec le symbole dièse, sauf la suivante
DATABASE_URL="mysql://root:root@127.0.0.1:3306/boutique?serverVersion=5.7"

Sauvegardez votre fichier.
Vous remarquerez que les valeurs à changer sont db_user, db_password et db_name dans cette ligne. Ce dernier correspond au nom que nous avons choisi pour la base de données.
Dans notre exemple, nous avons opté pour le mot boutique.

Avec la commande qui suit, vous allez créer votre base de données.
symfony console doctrine:database:create

Si vous avez correctement configuré votre configuration du moteur Php, aucun message d'erreur ne devrait apparaître.

Ajout des tables pour les produits et les catégories

Une table dans une base de données correspond à une entité (entity) dans Symfony. Si vous n'avez jamais appréhendé le langage de programmation SQL, une table est une sorte de classeur ou tableur.
Nous allons utiliser différents champs à l'intérieur de cette table. Nous aurons besoin pour notre exemple d'un titre, d'une description, d'un prix ainsi que d'une catégorie.

Il faut effectuer la commande suivante pour créer une table dans notre base de données :
symfony console make:entity

Class name of the entity to create or update (e.g. GrumpyPopsicle):
On vous demande le nom de la table (entité) que vous voulez créer ou mettre à jour. En l'occurence, nous allons créer une nouvelle table que nous nommerons "produit". Saisissez ce terme et validez.
Deux fichiers viennent de s'ajouter à notre projet. Ce sont les fichiers /src/Entity/Produit.php et /src/Repository/ProduitRepository.php.

New property name (press <return> to stop adding fields):
C'est le moment d'ajouter nos différents champs. Entrez le mot titre puis validez.

Field type (enter ? to see all types) [string]:
Il faut maintenant définir le type que l'on souhaite. Vous pouvez appuyez sur le point d'interrogation de votre clavier et valider pour lister les valeurs possibles.
Pour un titre, nous allons nous contenter du type string. Notre titre ne dépassera pas les 255 caractères, ce type est donc totalement approprié à notre cas de figure.
Saisissez le terme string dans le terminal et validez. Vous pouvez directement valider sans rien saisir. Dans ce cas, le terme en jaune entre crochets à la fin de l'invite de commande vous indique quelle valeur par défaut sera appliquée. Il en sera de même pour toutes les autres instructions.

Field length [255]:
Validez directement pour confirmer votre choix d'utiliser une longueur maximum de 255 caractères pour ici. Vous verrez par la suite que le fait de valider directement votre choix vous fera gagner énormément de temps.

Can this field be null in the database (nullable) (yes/no) [no]:
Nous ne souhaitons pas que le titre puisse rester vide, vous pouvez donc appuyer sur la touche Entrée de votre clavier. Nous verrons dans un autre tutoriel l'influence de ce comportement. Le futur administrateur de votre site ne pourra pas ajouter un nouveau produit s'il oublie de lui donner un titre.

Vous avez à présent terminé d'ajouter le champ correspondant au titre de votre table des produits. Le fichier /src/Entity/Produit.php a été modifié. Vous pouvez ouvrir ce fichier dans votre projet pour vérifier la précédente opération.

Add another property? Enter the property name (or press <return> to stop adding fields):
Vous avez alors la possibilité de stopper la modifiaction de la table en validant. Dans notre cas, nous allons continuer d'ajouter un nouveau champ. Saisissez la valeur description.

Field type (enter ? to see all types) [string]:
Nous aurons besoin d'un type différent pour les descriptions de nos futurs produits. Pour un texte long sans limitation de carctères, vous devrez saisir text et valider.

Can this field be null in the database (nullable) (yes/no) [no]:
Comme pour le titre, nous devons décider si la description peut rester vide ou non. Faites comme bon vous semble, cela n'aura pas d'impact pour cette partie de la formation accélérée.

Add another property? Enter the property name (or press <return> to stop adding fields):
Nous allons finir par entrer le prix. Inscrivez prix pour ce cas.

Field type (enter ? to see all types) [string]:
Comme il s'agit d'une valeur numérique, vous devrez saisir ici integer.

Can this field be null in the database (nullable) (yes/no) [no]:
Ne laisser pas le champ vide et validez.

Add another property? Enter the property name (or press <return> to stop adding fields):
Cette fois ci, Appuyer sur Entrée. Cela va avoir pour effet de fermer le programme d'assistance et libérer le terminal. Nous nous occuperons de la catégorie plus tard.
A cet instant, la table n'est toujours pas inscrite dans la base de données. Pour ce faire, nous allons devoir passer par une migration. Entrez la commande suivante dans votre terminal : 
symfony console make:migration

Le fichier de cette migration est disponible dans votre projet. Vous le trouverez dans le dossier /migrations. Afin de transmettre les requêtes contenues à l'intérieur de ce fichier, nous allons devoir taper une dernière commande :
symfony console doctrine:migrations:migrate
Le programme vous demandera de confirmer la modification. Votre entité, donc votre table a été inscrite dans la base de données.

Visualisation de la base de données

Afin d'obtenir un aperçu de votre boutique en ligne, je vous invite à rechercher dans l'onglet des extensions (panneau de gauche), l'expression mysql. Installez la version de cweijan.
Le pare-feu risque alors de s'activer. Autoriser l'accès en validant.
Cliquez alors dans le nouvel onglet sous celui des extensions nommé database.
Ensuite, cliquez sur le + en haut à droite (Add Connection). Choisissez un nom pour la connexion et saisissez root comme mot de passe. Pour finir, cliquez sur le bouton Connect.

Etape suivante

Nous saurons à la fin de la prochaine étape afficher la liste des produits sur notre page d'accueil.
Nous verrons également comment ajouter une entité pour la catégorie ainsi qu'une relation entre nos deux tables.

Menu