
Pendahuluan
Bayangin lagi ngerjain fitur dashboard analitik yang butuh ribuan data untuk testing performa, tapi kalau input manual satu-satu ya bakal makan waktu seharian. Saya sering ketemu situasi di mana tim QA protes karena data testing di environment development terlalu sedikit, sehingga bug-bug performa query sering lolos. Di sinilah Faker jadi penyelamat utama kita di Laravel supaya nggak perlu pusing mikirin data dummy yang realistis.
Tips & Best Practices
- Di banyak project, biasanya saya mulai dari memisahkan logic seeder ke dalam class factory yang spesifik agar tidak memenuhi file DatabaseSeeder utama yang bikin pusing mata.
- Saat ngerjain database yang relasinya kompleks, saya selalu membiasakan diri pakai method
has()ataufor()daripada bikin loop manual di dalam seeder karena performanya jauh lebih efisien. - Kalau datanya sudah mencapai puluhan ribu, saya lebih memilih penggunaan
chunk()atau memecah proses insert menjadi beberapa batch agar PHP tidak kena limit memory saat proses generate berlangsung.
Contoh Kode
Berikut adalah cara saya biasanya nge-generate ribuan user lengkap dengan profil mereka secara cepat:
// Database/Seeders/UserSeeder.php
public function run() {
User::factory()->count(5000)->hasProfile(1)->create();
}Dengan cara ini, Laravel otomatis ngurusin foreign key dan relasi satu-ke-satu tanpa harus saya tulis manual ID-nya satu per satu.
Variasi Implementasi
Ada dua pendekatan yang sering saya pakai: pertama, pakai create() kalau datanya memang butuh masuk ke database beneran, dan kedua, pakai make() kalau sekadar buat testing unit yang butuh object model tanpa harus nulis ke disk. Kalau lagi testing ribuan data, saya saranin pakai createQuietly() supaya event model seperti Created atau Saved tidak kepicu berkali-kali, ini bikin proses seeding jauh lebih ngebut.
Kesalahan Umum
- Seringnya kita lupa pakai
LazyCollectionssaat looping data besar, akhirnya server development malah crash karena memory exhausted. - Banyak developer yang tidak hati-hati dengan
unique()di Faker, padahal kalau data yang diminta lebih banyak dari limit unique, Faker bakal stuck selamanya. - Lupa nge-truncate atau membersihkan table sebelum seeding, jadi setiap kali running seeder, data menumpuk terus sampai database lambat.
- Terlalu bergantung pada hardcoded value, padahal Faker punya method
randomElementyang bikin data lebih variatif dan mirip asli. - Tidak mengabaikan timestamp saat proses seeding massal menggunakan
insert(), padahal ini krusial buat ngehemat waktu eksekusi.
Ringkasan
Seeding itu bukan sekadar formalitas biar database nggak kosong, tapi investasi supaya aplikasi kita punya profil data yang 'sehat' buat di-test. Setelah terbiasa memanfaatkan fitur factory bawaan Laravel, saya ngerasa workflow development jadi jauh lebih tenang karena data dummy yang dihasilkan sudah mencakup berbagai skenario yang mungkin terjadi di production nanti.
Komentar
Posting Komentar