laravelseederfactorydatabasePemula3 mnt baca

Seeder dan Factory: Data Dummy Otomatis

Isi database dengan data contoh memakai seeder dan factory berbasis Faker.

Kenapa butuh data dummy?

Saat mengembangkan fitur list, pagination, atau pencarian, kamu butuh puluhan sampai ratusan baris data. Mengisi manual lewat form itu buang waktu. Seeder dan factory menyelesaikan ini dalam satu perintah.

Factory: cetakan data palsu

Factory mendefinisikan bentuk satu baris data memakai library Faker:

bash
php artisan make:factory PostFactory --model=Post
php
// database/factories/PostFactory.php
namespace Database\Factories;

use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;

class PostFactory extends Factory
{
    protected $model = Post::class;

    public function definition(): array
    {
        return [
            'judul' => fake()->sentence(6),
            'slug' => fake()->unique()->slug(),
            'isi' => fake()->paragraphs(3, true),
            'status' => fake()->randomElement(['draft', 'published']),
        ];
    }
}

Helper fake() memberi akses ke Faker: name(), email(), numberBetween(), date(), imageUrl(), dan banyak lagi. Kamu juga bisa bikin state khusus, misalnya PostFactory dengan method published() yang selalu mengembalikan status published.

Seeder: menjalankan factory

Seeder adalah class yang mengatur data apa yang diisi:

bash
php artisan make:seeder PostSeeder
php
// database/seeders/PostSeeder.php
namespace Database\Seeders;

use App\Models\Post;
use App\Models\User;
use Illuminate\Database\Seeder;

class PostSeeder extends Seeder
{
    public function run(): void
    {
        $users = User::factory(5)->create();

        foreach ($users as $user) {
            Post::factory(10)->create(['user_id' => $user->id]);
        }
    }
}

Daftarkan di database/seeders/DatabaseSeeder.php lewat $this->call([PostSeeder::class]), lalu jalankan:

bash
php artisan db:seed
php artisan migrate:fresh --seed   # reset total lalu isi ulang

Catatan teknis: Factory butuh trait HasFactory di modelnya (use HasFactory;). Tanpa trait itu, pemanggilan Post::factory() akan error. Trait ini sudah ada secara default kalau model dibuat via php artisan make:model di Laravel 11.