Laravel Seeder Faker Factories

Database Seeder, Faker, dan Factory pada Laravel

Seeding pada laravel adalah sebuah fitur untuk mengisi data pada database dengan Data Dummy atau data testing.

Jika migrations berfungsi untuk menjalankan DDL (Data Definition Language), maka database seeder pada Laravel berfungsi untuk menjalankan DML (Data Manipulation Language).

Database seeder sangat berguna untuk membuat data pada tabel ketika melakukan pengembangan pada aplikasi atau sistem informasi. Input data ke database dengan cepat menggunakan Seeding Laravel.

Misal kita membutuhkan 100 data User yang akan kita jadikan sebagai data testing pada aplikasi yang sedang kita bangun, maka kita bisa generate data user menggunakan fitur Database Seeder Laravel dengan menjalankan Library PHP Faker yg sudah diterapkan pada Laravel.

Faker adalah Library PHP yang berguna untuk membuat data palsu. Faker mampu meng-generate ratusan bahkan ribuan data testing secara acak. Faker akan meng-generate data secara otomatis dan data yang di generate oleh Faker pun bukan asal-asalan bahkan datanya persis seperti data asli.

Cara Menggunakan Seeding pada Laravel

Disini kita masih menggunakan project ANISA yang sudah kita buat pada tutorial sebelumnya Tutorial CRUD Laravel.

Atau Anda sudah punya project laravel sebelumnya silahkan sesuaikan saja dengan project Laravel Anda.

Berikut cara membuat seeding Laravel:

1. Langkah pertama, kita buat database dan tabelnya. Disini Kita menggunakan tabel santri yg sudah kita buat pada tutorial sebelumnya. Kita akan membuat data santri secara otomatis dengan menggunakan Seeder dari Laravel.

Belajar Seeding Laravel
Belajar Seeding Laravel

2. Membuat Model untuk tabel santri, Model Santri nantinya pasti akan digunakan pada aplikasi. Tentunya, model ini juga akan digunakan pada model factory.

Buka terminal lalu masuk ke direktori project nya. Buat model dengan perintah berikut:

php artisan make:model SantriModel

Maka file bernama SantriModel.php otomatis dibuat pada direktori app/Models/SantriModel.php

Isi dari file model SantriModel.php seperti berikut:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class SantriModel extends Model
{
    use HasFactory;

    protected $table = 'santri';
    protected $primaryKey = 'id_santri';
    protected $fillable = ['nm_santri', 'tmp_lahir', 'tgl_lahir', 'alamat', 'no_hp'];
}

3. Membuat Seeders, buka terminal lalu masuk ke direktori project nya.

Kita generate sebuah seeder dengan menjalankan perintah berikut ini:

php artisan make:seeder SantriSeeder
Membuat Seeding Laravel
Membuat Seeding Laravel

Maka akan dibuat sebuah file seeder SantriSeeder.php secara otomatis pada direktori database/seeders/SantriSeeder.php

Kemudian buka file SantriSeeder.php tersebut isikan dengan kode berikut:

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class SantriSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        \App\Models\SantriModel::factory(10)->create();
    }
}

Perhatikan kode seeder di atas, pada bagian kode program factory(10)->create() ada angka 10, hal itu digunakan untuk menentukan jumlah dummy data yang ingin kita masukan.

4. Selanjutnya, kita perlu membuat file factory di mana kita akan menggunakan Library Faker yang menghasilkan data palsu.

Membuat factory dengan menggunakan perintah berikut:

php artisan make:factory SantriModelFactory --model=SantriModel
Membuat Factory Laravel
Membuat Factory Laravel

Maka secara otomatis dibuat file bernama SantriModelFactory.php pada direktori database/factories/SantriModelFactory.php

Isi dari SantriModelFactory.php seperti kode di bawah ini:

<?php

namespace Database\Factories;

use App\Models\SantriModel;
use Illuminate\Database\Eloquent\Factories\Factory;

class SantriModelFactory extends Factory
{
    /
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = SantriModel::class;

    /
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'nm_santri' => $this->faker->name(),
            'tmp_lahir' => $this->faker->city(),
            'tgl_lahir' => $this->faker->date($format='Y-m-d', $max='now'),
            'alamat'    => $this->faker->address(),
            'no_hp'     => $this->faker->phoneNumber()
        ];
    }
}

5. Sekarang kita tinggal menjalankan Seeding Laravel yang sudah kita buat di atas dengan perintah berikut di terminal:

php artisan db:seed --class=SantriSeeder
Menjalankan Seeders Laravel
Menjalankan Seeders Laravel

Coba buka database lihat pada tabel santri. Maka data santri berhasil di buat secara otomatis.

Seeder Factory Laravel
Seeder Factory Laravel

Generate Data User pada Laravel

Data User seperti data nama, username, email, password (Hash) juga dapat kita buat dengan menggunakan Database Seeding Laravel.

Cara Generate data user pada laravel menggunakan seeder:

1. Menyiapkan tabel users, tabel ini sudah disediakan oleh Laravel dengan menjalankan php artisan migrate pada project laravel.

2. Menyiapkan model users, model untuk tabel users juga sudah disediakan oleh laravel ketika kita create project laravel dengan nama file User.php

Coba lihat modelnya pada direktori app/Models/User.php Kita tidak perlu menambahkan lagi isi dari model User.php karena sudah default dari laravel.

Isi default dari model User.php adalah seperti berikut:

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

3. Membuat Seeders, file ini sudah tersedia dalam project laravel Anda dengan nama file DatabaseSeeder.php.

Aktifkan kode program yang di comment pada bagian berikut, hilangkan tanda // di awal kode:

// \App\Models\User::factory(10)->create();

Sehingga isi dari file DatabaseSeeder.php menjadi seperti berikut:

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
       \App\Models\User::factory(10)->create();
    }
}

Perhatikan kode seeder di atas, pada bagian kode program factory(10)->create() ada angka 10, hal itu digunakan untuk menentukan jumlah dummy data user yang ingin kita masukan.

4. Selanjutnya kita buat file factory. Sebuah file dengan nama UserFactory.php sudah ada dalam project laravel kita dan tinggal kita gunakan saja.

Karena kita akan meng-generate password dengan menggunakan Laravel Hashing maka perlu kita tambahkan kode berikut pada bagian atas:

use Illuminate\Support\Facades\Hash

Isi kode full dari file UserFactory.php adalah seperti dibawah ini:

<?php

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash

class UserFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => Hash::make('12345678') // password
            'remember_token' => Str::random(10),
        ];
    }

    /**
     * Indicate that the model's email address should be unverified.
     *
     * @return \Illuminate\Database\Eloquent\Factories\Factory
     */
    public function unverified()
    {
        return $this->state(function (array $attributes) {
            return [
                'email_verified_at' => null,
            ];
        });
    }
}

Perhatikan file factory di atas, perhatikan pada bagian kode program berikut:


return [
   'name' => $this->faker->name(),
   'email' => $this->faker->unique()->safeEmail(),
   'email_verified_at' => now(),
   'password' => Hash::make('12345678') // password
   'remember_token' => Str::random(10),
];

Silahkan field-filed yang ada di atas Anda sesuaikan dengan field tabel users pada project laravel Anda.

5. Sekarang kita tinggal menjalankan Seeding Laravel dengan perintah berikut:

php artisan db:seed

Maka data user sudah berhasil dibuat beserta password masing-masing user adalah 12345678.

Sampai disini kita sudah berhasil Membuat Seeder, Faker, dan Factory Laravel.

Web Programmer. Flutter Developer. Content Creator. Founder Ayongoding.com. Penyuka minuman sachet. Menulis pakai tangan kanan. Masih main mobilan remot. Dan pernah kuliah Sistem Informasi sampai lulus.

Satu Komentar

Leave a Reply

Your email address will not be published. Required fields are marked *