Laravel Model Factories: Fungsi dan Cara Penggunaan di Laravel 8

whynwd

whynwd Senin, 31 Mei 2021

Laravel Model Factories: Fungsi dan Cara Penggunaan di Laravel 8

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
Laravel Model Factories: Fungsi dan Cara Penggunaan di Laravel 8

Demikian. Kita sampai disini, silahkan dicoba.

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel