Tutorial Laravel #11: Seeder dan Factory di Laravel

1. Apa itu Seeder?

Seeder digunakan untuk mengisi database dengan data awal (initial data) atau data dummy untuk keperluan development dan testing. Misalnya mengisi tabel kategoris dengan data default, atau membuat 50 artikel dummy untuk testing tampilan pagination.

2. Membuat dan Menjalankan Seeder

# Buat seeder baru
php artisan make:seeder KategoriSeeder
php artisan make:seeder UserSeeder

# Jalankan seeder
php artisan db:seed

# Jalankan seeder spesifik
php artisan db:seed --class=KategoriSeeder

# Fresh migration + seed sekaligus
php artisan migrate:fresh --seed

3. Menulis Seeder

<?php
// database/seeders/KategoriSeeder.php
namespace DatabaseSeeders;

use IlluminateDatabaseSeeder;
use IlluminateSupportFacadesDB;

class KategoriSeeder extends Seeder
{
    public function run(): void
    {
        $kategoris = [
            ['nama' => 'Teknologi',  'slug' => 'teknologi'],
            ['nama' => 'Tutorial',   'slug' => 'tutorial'],
            ['nama' => 'Programming','slug' => 'programming'],
            ['nama' => 'Design',     'slug' => 'design'],
        ];

        DB::table('kategoris')->insert($kategoris);

        $this->command->info('Kategori seeder selesai!');
    }
}
<?php
// database/seeders/UserSeeder.php
namespace DatabaseSeeders;

use IlluminateDatabaseSeeder;
use AppModelsUser;

class UserSeeder extends Seeder
{
    public function run(): void
    {
        // Buat admin
        User::create([
            'name'     => 'Admin',
            'email'    => 'admin@example.com',
            'password' => bcrypt('password'),
        ]);
    }
}

4. DatabaseSeeder - Orkestrasi Semua Seeder

<?php
// database/seeders/DatabaseSeeder.php
namespace DatabaseSeeders;

use IlluminateDatabaseSeeder;

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        // Urutan penting! Seeder yang dependen harus setelah yang dibutuhkan
        $this->call([
            UserSeeder::class,
            KategoriSeeder::class,
            ArtikelSeeder::class,
        ]);
    }
}

5. Apa itu Factory?

Factory digunakan untuk generate data dummy secara massal menggunakan library Faker. Sangat berguna untuk testing dan mengisi database development dengan data realistis.

php artisan make:factory ArtikelFactory --model=Artikel
<?php
// database/factories/ArtikelFactory.php
namespace DatabaseFactories;

use AppModelsUser;
use AppModelsKategori;
use IlluminateDatabaseEloquentFactoriesFactory;
use IlluminateSupportStr;

class ArtikelFactory extends Factory
{
    public function definition(): array
    {
        $judul = fake()->sentence(6);

        return [
            'user_id'     => User::inRandomOrder()->first()->id,
            'kategori_id' => Kategori::inRandomOrder()->first()->id,
            'judul'       => $judul,
            'slug'        => Str::slug($judul),
            'konten'      => fake()->paragraphs(5, true),
            'status'      => fake()->randomElement(['draft', 'published']),
            'views'       => fake()->numberBetween(0, 5000),
        ];
    }
}

6. Menggunakan Factory di Seeder

<?php
// database/seeders/ArtikelSeeder.php
namespace DatabaseSeeders;

use AppModelsArtikel;
use IlluminateDatabaseSeeder;

class ArtikelSeeder extends Seeder
{
    public function run(): void
    {
        // Buat 50 artikel dummy
        Artikel::factory(50)->create();

        // Buat 10 artikel dengan status published
        Artikel::factory(10)->create(['status' => 'published']);

        $this->command->info('60 artikel dummy berhasil dibuat!');
    }
}

7. Beberapa Method Faker yang Berguna

fake()->name()                  // "John Doe"
fake()->email()                 // "john@example.com"
fake()->sentence(6)             // Kalimat dengan 6 kata
fake()->paragraph(3)            // 3 paragraf
fake()->paragraphs(3, true)     // 3 paragraf digabung jadi string
fake()->word()                  // Satu kata
fake()->text(200)               // Teks sepanjang ~200 karakter
fake()->numberBetween(1, 100)   // Angka antara 1-100
fake()->randomElement(['a','b','c']) // Pilih acak dari array
fake()->boolean()               // true atau false
fake()->dateTimeBetween('-1 year', 'now') // Random datetime
fake()->imageUrl(640, 480)      // URL gambar dummy
fake()->url()                   // URL random

8. Ringkasan

  • Seeder untuk mengisi data awal/tetap (kategori, admin, konfigurasi)
  • Factory untuk generate data dummy massal menggunakan Faker
  • Daftarkan seeder di DatabaseSeeder::run() dan perhatikan urutannya
  • Jalankan dengan php artisan db:seed atau php artisan migrate:fresh --seed

Tutorial berikutnya membahas query builder dasar di Laravel.


ariq fadhil

Im Ariq Tech, a Top Rated Fullstack Developer with 5+ years of experience, delivering high-quality solutions across 50+ projects.