Gérer notre base de données

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.