Tutorial Laravel 12 #5 : Cara Menggunakan Seeder dan Factory

0
101

Dalam pembuatan aplikasi menggunakan framework Laravel 12 dalam sebuah proses development dan testing aplikasi terkadang perlu dan membutuhkan data dummy dalam jumlah banyak untuk tujuan pengujian aplikasi tersebut sebelum naik ke server production. Bayangkan bagaimana lama dan lelahnya apabila Anda harus melakukan entri satu persatu data dummy secara manual ke dalam sebuah table didatabase, tentu hal ini akan sangat memakan waktu dan melelahkan serta tidak efisien bukan? Nah inilah pentingnya kita perlu mengenal penggunaan seeder dan factory di Laravel 12.

Dalam pengembangan aplikasi menggunakan Laravel 12, seeding dan factory merupakan dua fitur penting yang membantu developer dalam mengelola data, khususnya saat proses development dan testing. Keduanya bekerja sama untuk menghasilkan data secara otomatis sehingga mempercepat proses pembuatan aplikasi tanpa harus mengisi database secara manual.

Seeding adalah proses mengisi database dengan data awal atau data dummy menggunakan class yang disebut seeder. Laravel menyediakan struktur khusus untuk seeder di dalam direktori database/seeders. Setiap seeder memiliki method run() yang berisi instruksi untuk memasukkan data ke dalam database. Dengan menggunakan seeder, developer dapat memastikan bahwa database memiliki data yang konsisten setiap kali aplikasi dijalankan atau di-reset.

Salah satu keuntungan utama dari seeding adalah kemampuannya untuk mengotomatisasi pengisian data. Misalnya, dalam sebuah aplikasi developer dapat membuat seeder untuk mengisi tabel user, dan pegawai tanpa harus memasukkan data satu per satu. Hal ini sangat berguna ketika bekerja dalam tim, karena semua anggota tim dapat memiliki data awal yang sama dengan menjalankan perintah php artisan db:seed.

Selain itu, seeding juga sering digunakan bersamaan dengan fitur migrasi. Setelah menjalankan migrasi untuk membuat struktur tabel, developer dapat langsung menjalankan seeder untuk mengisi data. Bahkan Laravel menyediakan perintah php artisan migrate:fresh –seed yang akan menghapus seluruh tabel, membuat ulang, dan langsung mengisi data menggunakan seeder. Ini sangat membantu saat melakukan pengujian atau reset database.

Di Laravel 12 Anda dapat mengisi data user menggunakan seeder, langkahnya cukup standar. Berikut contoh panduan ringkasnya :

Pertama jalankan perintah artisan berikut pada command line :

php artisan make:seeder UserSeeder

Perintah diatas apabila dijalankan akan membentuk sebuah file seeder.

Laravel 12 Database Seeder

Bukalah file yang terbentuk pada folder database/seeder/UserSeeder.php lalu lakukan modifkasi pada function run() seperti berikut :

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;
use Illuminate\Support\Facades\Hash;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        {
            User::create([
                'name' => 'Admin',
                'email' => 'admin@example.com',
                'password' => Hash::make('password123'),
            ]);
            
        }
    }
}

Untuk menghasilkan sebuah data jalankan perintah artisan berikut :

php artisan db:seed

Apabila ingin menjalan seeder tertentu maka Anda dapat menambahkan class tertentu seperti perintah artisan berikut :

php artisan db:seed –class=UserSeeder

Apabila berjalan dengan baik, maka Anda akan menemukan record data di table User seperti contoh berikut :

Laravel 12 Record hasil Seeder

Lalu bagaimana kita menggunakan factory dalam sebuah seeder? Nah disini akan kita kupas terkait cara menggunakan seeder dan factory di Laravel 12. Factory adalah fitur yang digunakan untuk membuat data dummy secara dinamis dan fleksibel. Factory biasanya terkait dengan model tertentu dan didefinisikan dalam direktori database/factories. Dalam Laravel 12, factory menggunakan pendekatan berbasis class, di mana setiap factory memiliki method definition() yang berisi aturan pembuatan data menggunakan library Faker.

Faker adalah library yang digunakan untuk menghasilkan data palsu yang terlihat realistis, seperti nama, alamat, email, dan nomor telepon. Dengan bantuan Faker, data yang dihasilkan oleh factory tidak hanya acak, tetapi juga menyerupai data nyata. Hal ini sangat penting untuk pengujian tampilan dan logika aplikasi, karena data yang realistis dapat membantu menemukan bug yang mungkin tidak terlihat jika menggunakan data statis.

Factory memungkinkan developer untuk membuat banyak data dalam waktu singkat. Misalnya, dengan satu baris kode seperti User::factory()->count(100)->create(), developer dapat membuat 100 data user secara otomatis. Ini sangat efisien dibandingkan harus memasukkan data satu per satu secara manual.

Kombinasi antara seeding dan factory menjadi sangat powerful dalam pengembangan aplikasi. Seeder dapat memanggil factory untuk menghasilkan data dalam jumlah besar. Dalam hal ini, factory bertugas menentukan bentuk dan isi data, sedangkan seeder menentukan kapan dan berapa banyak data yang akan dibuat. Dengan pendekatan ini, kode menjadi lebih terstruktur dan mudah dikelola.

Selain itu, factory juga mendukung berbagai fitur lanjutan seperti state, sequence, dan relasi antar model. State memungkinkan developer untuk membuat variasi data tertentu. Misalnya, dalam model User, developer dapat membuat state untuk user yang berstatus aktif atau tidak aktif. Dengan demikian, factory tidak hanya menghasilkan data acak, tetapi juga dapat disesuaikan dengan kebutuhan skenario tertentu.

Factory juga mendukung relasi antar model, seperti one-to-many atau many-to-many. Sebagai contoh, developer dapat membuat user beserta beberapa post sekaligus menggunakan factory. Hal ini sangat membantu dalam mensimulasikan struktur database yang kompleks tanpa harus menulis banyak kode manual.

Dalam konteks testing, factory memiliki peran yang sangat penting. Laravel menyediakan fitur testing yang terintegrasi dengan PHPUnit, dan factory digunakan untuk membuat data uji dengan cepat. Dengan factory, setiap test dapat memiliki data yang fresh dan tidak saling bergantung, sehingga hasil testing menjadi lebih konsisten dan dapat diandalkan.

Seeder juga dapat digunakan dalam testing, meskipun lebih jarang dibandingkan factory. Biasanya seeder digunakan untuk mengatur kondisi awal tertentu sebelum menjalankan serangkaian test. Namun, karena factory lebih fleksibel, sebagian besar developer lebih memilih menggunakan factory dalam testing.

Penggunaan seeding dan factory juga harus memperhatikan environment aplikasi. Biasanya data dummy hanya digunakan di environment local atau development, dan tidak digunakan di production. Hal ini penting untuk menjaga keamanan dan integritas data. Laravel memungkinkan developer untuk mengatur agar seeder hanya dijalankan pada environment tertentu.

Selain itu, penggunaan seeding dan factory juga membantu dalam proses debugging. Dengan data yang konsisten, developer dapat dengan mudah mereproduksi bug dan menguji solusi yang dibuat. Jika terjadi kesalahan, database dapat di-reset dan diisi ulang dengan data yang sama menggunakan seeder.

Dalam Laravel 12, struktur factory dan seeder tetap mengikuti standar modern yang telah diperkenalkan sejak Laravel versi sebelumnya. Factory berbasis class memberikan fleksibilitas lebih dibandingkan pendekatan lama yang berbasis array. Hal ini membuat kode lebih mudah dibaca, di-maintain, dan dikembangkan.

Secara keseluruhan, seeding dan factory merupakan bagian penting dari workflow pengembangan Laravel modern. Keduanya membantu meningkatkan produktivitas developer, mengurangi pekerjaan manual, dan memastikan konsistensi data. Dengan memahami dan memanfaatkan fitur ini secara optimal, developer dapat membangun aplikasi dengan lebih cepat dan efisien.

Laravel 12 sudah mendukung factory modern. Berikut adalah contoh penggunaan kombinasi Seeder dan Factory di Laravel 12 :

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;
use Illuminate\Support\Facades\Hash;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        {            
            User::factory()->count(10)->create(); // optional pakai factory
        }
    }
}

Untuk menghasilkan data dummy jalankan perintah artisan seperti berikut :

php artisan db:seed –class=UserSeeder

Apabila berjalan dengan baik, maka kita akan menemukan data dummy di tabel User, seperti contoh berikut :

Laravel 12 data dummy Seeder dan Factory
Laravel 12 data dummy Seeder dan Factory

Nah demikianlah pembahasan singkat mengenai penggunaan Seeder dan Factory pada Laravel 12 semoga tutorial kali ini dapat memberi manfaat kepada pembaca. Sebagai kesimpulan, seeding berfungsi untuk mengatur proses pengisian data secara terstruktur, sedangkan factory bertugas untuk menghasilkan data tersebut secara dinamis. Kombinasi keduanya memberikan solusi yang kuat untuk kebutuhan pengelolaan data dalam berbagai tahap pengembangan aplikasi, mulai dari development, testing, hingga debugging.