Dans ce tutoriel nous allons créer notre première table dans notre base de données SQLite.
Si vous utilisiez MySQL dans vos applications PHP, vous avez sans doute déjà utilisé PHPMyAdmin pour visualiser et créer vos tables dans votre base de données. Le principal inconvénient de cette approche et pour le partage de la structure de la base de données. Si un collègue a besoin de tester l'application vous devez lui envoyer un export de la base ou si vous devez mettre en ligne l'application. Même chose lors de la mise en ligne de l'application. Laravel vient avec une solution à ce problème : les migrations.
Présentation des migrations
Les migrations sont de simples fichiers (classes) PHP qui contiennent une modification de la base de données (créer une table, ajouter une colonne à une table existante, supprimer une table…). Ces fichiers sont stockés dans le dossier database/migrations
. L'installation de base de Laravel nous fournit deux exemples de migrations. Nous allons étudier celui de la table users
dans 2014_10_12_000000_create_users_table.php
:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Ce code permet de créer une table (avec Schema::create
), nommé users
. Dans la fonction anonyme, vous retrouvez la description des colonnes de cette table. increments
permet de créer un entier auto-incrémenté. string
un champ de type varchar
. unique
permet de définir une contrainte d'unicité sur la colonne email
. rememberToken
ne nous servira pas. Et finallement, timestamps
permet de créer deux colonnes, une created_at
qui enregistre la date d'insertion de la ligne, et une updated_at
qui enregistre la date de la dernière modification de la ligne.
On remarque aussi que la classe CreateUsersTable
contient une fonction down
. Cette fonctionne représente l'inverse de la migration, c'est à dire, supprimer la table users
. Cela permet à Laravel de revenir en arrière si besoin.
Création d'une table
Nous allons créer notre propre migration pour étudier la méthode. Avant cela, nous allons supprimer les deux migrations présentes dans le dossier database/migrations
.
Nous pourrions créer notre propre migration manuellement en créant un nouveau fichier mais Laravel fournit avec php artisan
une commande pour créer une migration pré-remplie : php artisan make:migration create_utilisateurs_table
.
Dans le nouveau fichier créé par Laravel on voit que la migration permet de créer une table utilisateurs
avec une colonne ID auto-incrémentée, et les dates created_at
et updated_at
. Laravel a compris que nous voulions créer une table grâce au mot clé create
dans la commande Artisan.
Nous n'avons plus qu'à rajouter notre colonne unique pour l'email et une colonne pour le mot de passe :
Schema::create('utilisateurs', function (Blueprint $table) {
$table->increments('id');
$table->string('email')->unique();
$table->string('mot_de_passe');
$table->timestamps();
});
Exécuter les migrations
Pour exécuter les migrations, nous pouvons utiliser la commande php artisan migrate
. Cette commande ne va exécuter que les migrations qui ne sont pas déjà présentes dans la base de données. Vous pouvez faire le test en exécutant une deuxième fois la commande, rien ne devrait se passer.
Pour vérifier que tout a bien fonctionner, nous aurions besoin de visualiser notre base de données avec un outil du même genre que PHPMyAdmin. Je vous conseille d'utiliser DB Browser for SQLite. Ce programme s'installe sur votre machine et vous pouvez ouvrir votre fichier database/database.sqlite
avec. Une fois ouvert, nous pouvons voir la table migrations
qui permet à Laravel de retenir quelle migration a été exécuté et quelles sont les nouvelles migrations. Nous avons également notre table utilisateurs
qui contient bien nos colonnes.
Dans le prochain tutoriel nous allons exécuter nos premières requêtes SQL sur cette nouvelle table.