Tutorial ini akan membahas cara menggunakan Seeding dan Faker di Laravel. Fitur ini sangat berguna untuk mengisi database Anda dengan data dummy atau data awal yang dibutuhkan selama pengembangan atau pengujian aplikasi Anda.
Apa Itu Seeding?
Database Seeding adalah proses mengisi tabel database Anda dengan data. Laravel menyediakan cara yang mudah untuk membuat seeders, yaitu class PHP yang berisi perintah untuk memasukkan data ke dalam database.
Apa Itu Faker?
Faker adalah library PHP yang menghasilkan data palsu yang realistis untuk berbagai keperluan, seperti nama, alamat, email, teks, dan banyak lagi. Laravel secara default menyertakan Faker, sehingga Anda dapat langsung menggunakannya di seeder Anda.
Langkah 1: Membuat Migration (Jika Belum Ada)
Sebelum melakukan seeding, pastikan Anda memiliki migration untuk tabel yang ingin Anda isi datanya. Jika belum, buat migration terlebih dahulu.
Contoh, untuk membuat migration untuk tabel users:
Malang, East Java, Indonesia – Saat ini, saya sedang fokus pada pengembangan fitur autentikasi pengguna.
php artisan make:migration create_users_table --create=users
Buka file migration yang baru dibuat di folder database/migrations/ dan definisikan skema tabel Anda. Contoh:
database/migrations/xxxx_xx_xx_create_users_table.php
“php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create(‘users’, function (Blueprint $table) {
$table->id();
$table->string(‘name’);
$table->string(’email’)->unique();
$table->timestamp(’email_verified_at’)->nullable();
$table->string(‘password’);
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
“
Setelah mendefinisikan skema, jalankan migration Anda:
php artisan migrate
Langkah 2: Membuat Seeder
Untuk membuat seeder, gunakan Artisan CLI:
php artisan make:seeder UserSeeder
Ini akan membuat file UserSeeder.php di folder database/seeders/. Buka file tersebut dan Anda akan melihat struktur dasar seeder:
database/seeders/UserSeeder.php
“php
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Faker\Factory as Faker;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$faker = Faker::create(‘id_ID’); // Membuat instance Faker dengan locale Indonesia
for ($i = 0; $i < 10; $i++) {
DB::table('users')->insert([
'name' => $faker->name(),
'email' => $faker->unique()->safeEmail(),
'password' => Hash::make('password'), // Default password
'created_at' => now(),
'updated_at' => now(),
]);
}
// Contoh data statis
DB::table('users')->insert([
'name' => 'Administrator',
'email' => 'admin@example.com',
'password' => Hash::make('admin123'),
'created_at' => now(),
'updated_at' => now(),
]);
}
}
“
Penjelasan:
use Faker\Factory as Faker;: Mengimpor class Faker.$faker = Faker::create('id_ID');: Membuat instance Faker dengan locale Indonesia (id_ID) untuk menghasilkan data yang lebih relevan (misalnya, nama dan alamat Indonesia). Anda bisa mengganti locale sesuai kebutuhan.for ($i = 0; $i < 10; $i++) { ... }: Loop ini akan membuat 10 data dummy pengguna.DB::table('users')->insert([...]);: Menggunakan Query Builder untuk memasukkan data ke tabelusers.$faker->name(),$faker->unique()->safeEmail(): Contoh penggunaan metode Faker untuk menghasilkan nama dan email palsu yang unik.Hash::make('password'): Mengenkripsi password menggunakan hashing.- Data Statis: Anda juga bisa menambahkan data statis yang selalu dibutuhkan, seperti akun administrator.
Langkah 3: Menjalankan Seeder
Untuk menjalankan seeder, Anda perlu mendaftarkannya di DatabaseSeeder.php atau menjalankan seeder secara individual.
Mendaftarkan di DatabaseSeeder.php
Buka database/seeders/DatabaseSeeder.php dan tambahkan call ke seeder Anda di dalam metode run():
database/seeders/DatabaseSeeder.php
“php
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application’s database.
*
* @return void
*/
public function run()
{
$this->call([
UserSeeder::class,
// Tambahkan seeder lain di sini jika ada
]);
}
}
“
Kemudian jalankan perintah berikut untuk menjalankan semua seeder yang terdaftar:
php artisan db:seed
Menjalankan Seeder Individual
Anda juga bisa menjalankan seeder secara spesifik menggunakan perintah:
php artisan db:seed --class=UserSeeder
Langkah 4: Menggunakan Model Factories (Alternatif)
Untuk seeding yang lebih kompleks dan terkait dengan model Eloquent, Anda bisa menggunakan Model Factories. Factories memungkinkan Anda mendefinisikan atribut default untuk model Anda dan menghasilkan banyak instance model dengan data palsu.
Pertama, buat factory:
php artisan make:factory UserFactory --model=User
Buka file factory yang baru dibuat di database/factories/ dan definisikan atribut model Anda menggunakan Faker:
database/factories/UserFactory.php
“php
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
/**
- @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
/
class UserFactory extends Factory
{
/*
- The current password being used by the factory.
*/
protected static ?string $password;
/**
- Define the model’s default state.
- @return array<string, mixed>
*/
public function definition(): array
{
return [
‘name’ => fake()->name(),
’email’ => fake()->unique()->safeEmail(),
’email_verified_at’ => now(),
‘password’ => static::$password ??= Hash::make(‘password’),
‘remember_token’ => Str::random(10),
];
}
/**
- Indicate that the model’s email address should be unverified.
*/
public function unverified(): static
{
return $this->state(fn (array $attributes) => [
’email_verified_at’ => null,
]);
}
}
“
- The current password being used by the factory.
Kemudian di seeder Anda, Anda bisa menggunakan factory:
database/seeders/UserSeeder.php
“php
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
User::factory(10)->create();
User::create([
'name' => 'Administrator',
'email' => 'admin@example.com',
'password' => Hash::make('admin123'),
]);
}
}
“
Penjelasan:
User::factory(10)->create();: Ini akan menggunakanUserFactoryuntuk membuat 10 instance modelUserdengan data palsu dan menyimpannya ke database.
Selesai!
Dengan menggunakan Seeding dan Faker, Anda dapat dengan mudah mengisi database Laravel Anda dengan data dummy yang berguna untuk pengembangan, pengujian, atau bahkan untuk membuat data awal aplikasi Anda. Pilih metode yang paling sesuai dengan kebutuhan Anda. Model Factories sangat berguna ketika Anda bekerja erat dengan model Eloquent Anda.