Laravel : Mengenal fitur factory (membuat data fake)

Membuat data fake secara masal dengan fitur factory.

Fadli Rivansyah
5 min readSep 15, 2024
Photo by charlesdeluvio on Unsplash

Artikel ini membahas mengenai tentang factory pada laravel, membedah kode pada class UserFactory, dan bagaimana cara menjalankan dengan tinker.

Ketika kita ingin mengerjakan projek, tentu kita membutuhkan data dummy sebagai bahan simulasi terhadap projek kita. Data dummy ialah data fake (palsu) berupa numerik seperti nama, alamat, umur, telepon, negara, dlln.

Anggap saja kita memerlukan data dummy yang dapat menampilkan data ke aplikasi serta mengisi data ke database, setiap recordnya memilki 8 column dengan data numerik yang berbeda. untuk itu kita akan melakukan secara manual terhadap 3 record tersebut.

kita dapat melakukan satu persatu. tetapi bagaimana jika aplikasi membutuhkan data yang banyak misalnya 5, 10, 50, atau 100 data sebagai simulasi.

hal itu tentu membuat kita lelah atau bosan, apalagi jika data tersebut memerlukan pengulangan data, yang biasanya mereka menggunakan dengan perintah php artisan migrate:fresh.😁

Kabar baik nya Laravel memberikan kita kemudahan untuk mengatasi masalah tersebut. laravel memberikut fitur factory untuk mengenerate data secara masal.

Apa itu factory pada laravel? factory merupakan class yang digunakan untuk menghasilkan data dummy yang dapat diproduksi secara masal. dari informasi yang didapat, fitur ini di perkenalkan pada laravel 5.1. lalu berkembang yang dapat terinstregasikan dengan faker PHP. kamu bisa melihat penjelasan lebih lanjut dengan link berikut Eloquent: Factories — Laravel 11.x — The PHP Framework For Web Artisans

Membuat factory pada laravel

Dari informasi yang aku ketahui, laravel memberikan cara untuk membuat factory dengan menggunakan php artisan berikut perintahnya.

php artisan make:factory nama_factory

untuk penulisan nama disarankan diakhir dengan kata Factory seperti PostFactory. hal ini memberikan konsistensi dan kemudahan dalam keterbacaan file.

jika menjalankan perintah diatas akan menghasilkan file factory yang terletak pada direktori database/factories. kamu akan melihat file pada folder tersebut.

Membedah file UserFactory

Sekarang kita akan membedah file UserFactory. class ini secara default sudah dibuatkan oleh laravel, lihatlah code dibawah ini.

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,
]);
}
}

ketika membuka file UserFactory akan menemukan namespace database/factories;

namespace Database\Factories;

sala satu fungsi namespace adalah mencegah nama file yang sama. setelah itu kita di pertemukan dengan class yang di import.

use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
  1. use Illuminate\Database\Eloquent\Factories\Factory; modul ini digunakan agar terhubung dengan class Factory. karena class Factory akan mewarisi file factory yang dibuat misalnya UserFactory. melakukan import module ini merupakan hal yang wajib yang digunakan untuk membuat data pada factory.
  2. use Illuminate\Support\Facades\Hash; digunakan untuk melakukan hashing terhdapat kata sandi yang mengasilkan data numerik yang unik, sehingga orang-orang tidak mudah untuk melihatnya serta lebih aman dari serangan brute force.
  3. use Illuminate\Support\Facades\Hash; digunakan untuk mamanipulasi string seperti pengubahan format.

Di dalam class UserFactory terdapat modifier protected.

protected static ?string $password;

code diatas menjelaskan bahwa nilai $password akan menghasilkan type data string, tetapi bisa saja bernilai null. ini akan bekerja pada class UserFactory dan class warisannya saja

Nah,, selanjutnya inilah yang paling penting yaitu method definition

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),
];
}

method ini digunakan untuk membuat data factory, disini lah kita dapat menentukan data apa yang dapat kita buat. seperti nama, email, password, dlln.

return [
'name' => fake()->name(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'),
'remember_token' => Str::random(10),
];

pada kode diatas, kita dapat melihat array assosiasif yang memiliki key serta value yang memiliki banyak fungsi seperti fake(), name(), unique(), now(), dlln. kita bisa memanfaatkan helper laravel, fungsi-fungsi yang dapat memanipulasi string, dan kita sudah tau bahwa laravel factory sudah terintregasi dengan faker PHP. kita dapat memanfaatkan fungsi-fungsi sesuai dengan kebutuhan.

kamu bisa mengunjungi faker PHP disini untuk mengganti data local, secara default data yang di hasilkan mengunakan data di negara barat. kamu bisa mengganti nya dengan data di negara kamu. untuk mengubahnya kamu cukup pergi ke file .env misalnya negara indonesia kamu cukup ubah APP_FAKER_LOCALE=en_EN menjadi APP_FAKER_LOCALE=id_ID untuk indonesia.

kita juga dapat menambahkan method lainnya selain method definition(), di dalam class UserFactory secara default terdapat method unverified(). ini merupakan method optional. dan method ini dapat berjalan jika dipanggil perintah untuk membuat data yang ada didalamnya.

untuk menjalankan kamu bisa menggunakan tinker pada laravel. untuk penjelasan nanti di topik selanjutnya. sekarang kembali lagi di penjelasan yang sebelumnya.

public function unverified(): static
{
return $this->state(fn (array $attributes) => [
'email_verified_at' => null,
]);
}

ketika menjalankan perintah unverified() maka akan membuat data yang didalamanya dan menimpa data yang sebelumnya.

//data_seblumnya
'email_verified_at' => now(),

menjadi,

//ditimpa_menjadi
'email_verified_at' => null,

hasil akan menjadi data baru yang di buat oleh method unverified().

fitur laravel factory memberikan kita kemudahan membuat data yang kita inginkan apakah nilai nya true atau false, sekarang pergunakan sesuai dengan kebutuhanmu.., oke👌

Menjalankan factory

untuk menjalankan kamu dapat menggunakan tinker maupun seeder. sesuaikan dengan kenyamanan dirimu.

jika kamu menggunakan tinker, pergi ke terminal tambahkan perintah

php artisan tinker

jika berhasil kamu akan berada di lingkungan tinker,

lalu jalankan perintah,

App\Models\User::factory()->create()

jika kamu ingin data nya 100 cukup tambahkan pada parameter factory

App\Models\User::factory(100)->create()

maka akan dibuatkan 100 data oleh laravel factory. jika kamu ingin menjalankan method optional yang sudah kita bahas di topik sebelumnya, sebagai contoh kita menjalankan method unverified(). berikut perintahnya

App\Models\User::factory()->unverified()->create()

maka data yang ada di method unverified() akan di buatkan.

untuk menggunakan seeder mungkin di artikel terpisah. saat ini artikel tentang seeding belum dibuat. jadi ini saja cara sederhana untuk menjalankan factory melalui tinker.

Diakhir ini kita sudah membahas tetang laravel factory yang memberikan kita kemudahan dalam membuat data dummy.

Mungkin itu saja pembahasan yang dapat saya bagikan tentang fitur factory untuk selengkapnya kamu dapat kunjungi dokumentasi resmi laravel, di sana kamu dapat ilmu lebih luas lagi mengenai fitur factory.

jika ada pembahasan ini yang keliru mohon di beritahu dan komentar, sehingga kita sama-sama belajar dan memperbaiki apa yang harus diperbaiki. oke👌

--

--

Fadli Rivansyah
Fadli Rivansyah

Written by Fadli Rivansyah

As web development | interested in laravel technology

No responses yet