Table des matières

Laravel

Seeding

(remplir automatiquement sa base de données)

https://laravel.com/docs/8.x/seeding

Créer un Seed

  php artisan make:seeder UsersTableSeeder
Cela va créer un fichier de seed dans le dossier /database/seeds

Fichier ⇒ UsersTableSeeder.php

Pour mettre des informations aléatoires

public function run()
   {
       DB::table('users')->insert([
           'name' => Str::random(10),
           'email' => Str::random(10).'@gmail.com',
           'password' => bcrypt('secret'),
       ]);
   }

Pour mettre des informations


use Illuminate\Database\Seeder;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => 'gilles',
            'email' => 'gilles@domaine.com',
            'password' => bcrypt('admin'),
            'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
            'updated_at' => Carbon::now()->format('Y-m-d H:i:s'),
        ]);
        DB::table('users')->insert([
            'name' => 'gael',
            'email' => 'gael@domaine.com',
            'password' => bcrypt('user'),
            'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
            'updated_at' => Carbon::now()->format('Y-m-d H:i:s'),
        ]);
        DB::table('users')->insert([
            'name' => 'romane',
            'email' => 'romane@domaine.com',
            'password' => bcrypt('user'),
            'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
            'updated_at' => Carbon::now()->format('Y-m-d H:i:s'),
        ]);
    }
}

Pour gérer les dates et les heures, on utilise la bibliothèque Carbon ⇒ https://carbon.nesbot.com/docs/

Prérequis

Afin de mettre à jour l'autoloader (système qui charge les Class automatiquement), il faut faire

  composer dump-autoload 

Lancer le Seed

Afin de pouvoir lancer tous les seeds, il faut ajuster le fichier database/seeds/DatabaseSeeder.php. Dans cette exemple, on ajoute trois seeds précédemment créés: Users, Posts et Categories

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call(UsersTableSeeder::class);
        $this->call(PostsTableSeeder::class);
        $this->call(CategoriesTableSeeder::class);
    }
}

Puis dans le terminal, on peut lancer les seeds

  php artisan db:seed

Si on souhaite lancer un seul seed, il faut le préciser comme ceci:

  php artisan db:seed --class=UsersTableSeeder

Lancer la migration + le seed

  php artisan migrate:refresh --seed

Utiliser une factory

Voir l'exemple dans le fichier \database\factories\UserFactory.php

Utilise la bibliothèque Faker afin de générer des fausses données.

Dans le fichier \database\seeders\DatabaseSeeder.php On configure le nombre de fois que l'on veut exécuter la Factory

public function run()
{
    \App\Models\User::factory(10)->create();
}

Puis on lance le seed

  php artisan db:seed --class=UsersTableSeeder