Laravel database seeders for test data

Carlos Mendez Jan 2026
3 tabs
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        if (app()->environment('production')) {
            $this->command->warn('Skipping seeders in production');
            return;
        }

        $this->call([
            UserSeeder::class,
            CategorySeeder::class,
            PostSeeder::class,
            CommentSeeder::class,
        ]);
    }
}
3 files · php Explain with highlit

Seeders populate databases with test or initial data. I create seeder classes in database/seeders with a run() method. The DatabaseSeeder orchestrates other seeders. For large datasets, I use factories with factory()->count(100)->create() for performance. Model factories define default attributes and states for variations. Seeders support environments—only run certain seeders in development. I use transactions in seeders to roll back on errors. The --class flag runs specific seeders without running all. Seeders are perfect for demo data, development databases, or initial application setup. Combined with migrations, they enable reproducible database states across environments.