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:
php artisan make:factory PostFactory --model=Post// 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:
php artisan make:seeder PostSeeder// 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:
php artisan db:seed
php artisan migrate:fresh --seed # reset total lalu isi ulangCatatan teknis: Factory butuh trait
HasFactorydi modelnya (use HasFactory;). Tanpa trait itu, pemanggilanPost::factory()akan error. Trait ini sudah ada secara default kalau model dibuat viaphp artisan make:modeldi Laravel 11.