Laravel menyediakan cara mudah yang dapat kita gunakan untuk menghasilkan berbagai jenis data acak untuk pengujian atau sebagai data contoh untuk testing melalui fitur model factories.
Fungsi model factories adalah untuk mengisi record tebel database kita. Dengan fitur ini, kita dapat mengisi kolom tabel dengan data acak yang disediakan dan dengan jumlah yang dapat kita tentukan sendiri.
Cara pembuatan dan penggunaannya juga sangat mudah dan sederhana. Mari kita mencobanya.
Instalasi, Database, Model dan Migrasi
Kita download projek baru laravel, membuat database, model dan membuat tabel.
laravel new factory
Silahkan buat database MySQL baru dan hubungkan dengan laravel.
MariaDB [(none)]> create database factory; Query OK, 1 row affected (0.010 sec) //.env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=factory DB_USERNAME=root DB_PASSWORD=
Selanjutnya kita buat sebuah file migrasi baru untuk membuat tabel sekaligus model nya.
php artisan make:model Post -m
Kemudian buka file migrasi yang baru dibuat dan tambahkan beberapa kolom, seperti dibawah ini.
public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('body'); $table->timestamps(); }); }
Lalu jalankan pertintah migrasi.
php artisan migrate
MariaDB [factory]> show tables; +-------------------+ | Tables_in_factory | +-------------------+ | failed_jobs | | migrations | | password_resets | | posts | | users | +-------------------+ 5 rows in set (0.001 sec)
Membuat Model Factories
Selanjutnya kita buat file Factory untuk kita tambahkan record ke tabel
posts
. Pembuatan factory baru menggunakan pertintah artisan
make:factory [nama file]
seperti dibawah ini.
php artisan make:factory PostFactory
File factory yang telah dibuat berada pada direktori
database > factories. Silahkan buka file tersebut dan pada metode
definition()
buat seperti dibawah ini.
public function definition() { return [ 'title' => $this->faker->sentence(), 'body' => $this->faker->paragraph(), ]; }
Fitur Factory ini menggunakan library PHP Faker
untuk menghasilkan data secara acak, dan penggunaanya menggunakan properti faker
seperti di atas.
Sedangkan sentence()
dan paragraph()
adalah
generator untuk jenis nilai atau value yang akan dihasilkan. Seperti
sentence()
yang akan membuat sebuah kalimat dengan beberapa kata dan paragraph()
yang akan menghasilkan text paragraf.
Ada banyak pilihan metode atau jenis generator atau yang disebut "formatters" yang bisa kita gunakan, lebih lengkapnya silahkan buka dokumentasi formatters fakerPHP untuk melihatnya.
Jika dilihat di folder factories selain file PostFactory.php yang kita buat tadi , disediakan file UserFactory.php sebagi contoh untuk mengisi tabel users. Kita akan kirim keduanya sekaligus ke database menggunakan seeder.
Namun sebelum kita lakukan seeding, kita daftarkan terlebih dahulu kedua Model factories di DatabaseSeeder.php, seperti dibawah ini.
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { public function run() { \App\Models\User::factory(5)->create(); \App\Models\Post::factory(10)->create(); } }
Angka 5
dan 10
adalah jumlah record yang akan tambahkan ke masing-masing tabel. Sekarang kita lakukan seeding dengan perintah dibawah ini.
php artisan db:seed
Postingan terkait seeder: Cara Seeding Data di Laravel 8.
@factory ➜ php artisan db:seed Database seeding completed successfully.
Setelah selesai silahkan lihat hasilnya di database.
Atau kita bisa lakukan query menampilkannya di browser. Buka route web.php dan ubah route yang ada seperti dibawah ini.
Route::get('/', function () { $posts = DB::table('posts')->get(); $users = DB::table('users')->get(); dd($posts, $users); });
php artisan serve
Demikian. Kita sampai disini, silahkan dicoba.