Les fichiers de seeds de Laravel pour insérer les données initiales dans la BD

Il est possible d’ajouter des données initiales, aussi appelées données de base, ainsi que des données de test dans les tables à l’aide de fichiers de « seeds ».

▼Publicité

Données initiales vs données de test

Quelle est la différence entre les données initiales et les données de test ? Les données initiales seront livrées avec le site Web. Il s'agit de données qui existeront peu importe à qui le site est vendu (ex : données pour remplir une table de villes, de couleurs, etc.).

Les données de test, quant à elle, ne seront pas livrées avec le site Web. Il s'agit de données fictives dont le but est de permettre de bien tester le site Web (ex : clients, produits, etc.).

Générer le fichier de seeds

Un fichier de seeds sera créé à l’aide de la commande :

Console Vagrant SSH

php artisan make:seeder CategoriesTableSeeder

Le fichier ainsi généré sera placé dans le dossier database\seeds, sous le dossier du projet, et contiendra le code suivant :

Fichier de seeds (PHP)

<?php

 

use Illuminate\Database\Seeder;

 

class CategoriesTableSeeder extends Seeder

{

    /**

     * Run the database seeds.

     *

     * @return void

     */

    public function run()

    {

        //

    }

}

Éditer le fichier de seeds

Éditez ce fichier pour y ajouter les données désirées à l'aide de DB::table().

Fichier de seeds (PHP)

public function run()

{

    DB::table('categories')->insert([

        [

            'id' => 1,

            'description' => 'Plantes annuelles',

        ],

        [

            'id' => 2,

            'description' => 'Plantes vivaces',

        ],

        [

            'id' => 3,

            'description' => 'Arbustes',

        ],

        [

            'id' => 4,

            'description' => 'Arbres',

        ],

        [

            'id' => 5,

            'description' => 'Potager',

        ],

    ]);

}

Pour les clés primaires, vous avez le choix de forcer une valeur ou de laisser le SGBD utiliser la prochaine valeur disponible.

Il est suggéré de forcer la valeur des clés primaires lorsque le fichier de seeds est utilisé pour ajouter des données initiales. Ceci facilitera la gestion des clés étrangères.

Il sera possible, si désiré, de laisser le SGBD utiliser la prochaine valeur disponible lorsque le fichier de seeds est utilisé pour ajouter des données de test.

Exécuter tous les fichiers de seeds du fichier DatabaseSeeder.php

Pour qu'un fichier de seeds soit exécuté, on y ajoutera une référence dans le fichier database\seeds\DatabaseSeeder.php. Ce fichier contiendra la liste des fichiers de seeds à exécuter en lot.

Attention : lorsqu'une table contient une clé étrangère, ses données initiales doivent être ajoutées après celles de la table contenant la clé primaire de la relation.

Il peut être intéressant de séparer les données initiales, qui devront être livrées avec l'application, des données de test.

Fichier DatabaseSeeder.php (PHP)

public function run()

{

    // données initiales

    $this->call(PaysTableSeeder::class);

    $this->call(ProvincesTableSeeder::class);

    $this->call(VillesTableSeeder::class);

 

    // données de test

    $this->call(CategoriesTableSeeder::class);

    $this->call(ProduitsTableSeeder::class);

}

Ce fichier sera exécuté par la commande suivante :

Console Vagrant SSH

php artisan db:seed

Si une table contenait déjà des données, le fichier de seeds ajoutera les nouvelles données à la suite des données existantes.

Si vous exécutez cette commande plus d'une fois, les données seront dédoublées.

Dans le cas où les clés primaires sont codées en dur, vous obtiendrez plutôt un message d'erreur.

Approche des fichiers de migration vs approche des fichiers de seeds

La façon dont Laravel détermine quels fichiers de migration doivent être exécutés est bien différente de celle qu'il utilise pour déterminer quels fichiers de seeds doivent être exécutés.

  • À chaque fois que vous exécutez des fichiers de migration, Laravel maintient dans la table migrations la liste des fichiers qui ont déjà été exécutés.

    Lorsque vous lancez à nouveau la commande php artisan migrate, Laravel exécute tous les fichiers de migration dont le nom ne figure pas dans cette table.

  • Pour les fichiers de seeds, c'est au développeur de maintenir la liste des fichiers à exécuter. Ceci sera fait dans le fichier DatabaseSeeder.php.

    Lorsque vous lancez la commande php artisan db:seed, Laravel exécute tous les fichiers de seeds présents dans ce fichier.

Exécuter un seul fichier de seeds

En cours de développement, il peut arriver que vous ayez besoin d'exécuter un seul fichier de seeds. La commande artisan a prévu une option à cet effet :

Console Vagrant SSH

php artisan db:seed --class=MaTableTableSeeder

Réinitialiser toutes les données

Il est possible de supprimer toutes les tables puis de réexécuter les fichiers de migration et de seeds comme suit :

Console Vagrant SSH

php artisan migrate:refresh --seed

Après avoir exécuté cette commande, vous aurez une base de données toute neuve !

Si vous prenez le soin de bien maintenir vos fichiers de migration, vos fichiers de seeds et le fichier DatabaseSeeder.php, vous pourrez en tout temps réinitialiser votre base de données à l'aide de cette commande.

Pour plus d'information

« Database: Seeding ». Laravel. https://laravel.com/docs/master/seeding

« Laravel 5 - Example of Database Seeder with insert sample data ». IT Solution Stuff. http://itsolutionstuff.com/post/laravel-5-example-of-database-seeder-with-insert-sample-dataexample.html

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories