Beberapa waktu yang lalu, saya menangani pengembangan web yang harus terintegrasi dengan sistem yang sudah ada. Akun yang dipakai untuk login ke dalam web yang saya kembangkan itu pun akun dari sistem yang saat ini sudah berjalan. Selain data akun, perlu juga data pendukung lainnya untuk keperluan development web. Karena belum ada database yang bisa digunakan untuk keperluan development, akhirnya saya membuat database khusus untuk development dan datanya pun digenerate langsung menggunakan library faker. Solusi ini biasanya disebut Database Seeding dan saya coba terapkan database seeding ini di codeigniter 4 untuk generate dummy data.

Di Dokumentasi codeigniter 4 tentang Database Seeding, Database seeding merupakan salah satu cara yang memudahkan developer dan biasa digunakan untuk menambahkan data ke dalam database. Sebetulnya bisa saja kita insert langsung kalau datanya sedikit. Nah kalau datanya banyak? ratusan? ribuan? ga mungkin kita tambahkan satu satu datanya. Jadi database seeding ini benar-benar mempermudah untuk membuat atau generate dummy data di project CodeIgniter 4 dan tentu untuk framework lainnya.

Di tutorial Database seeder CodeIgniter 4 ini, supaya sample datanya kelihatan seperti data beneran, kita akan pakai Library Faker. Library faker ini biasa digunakan untuk generate data seperti nama, alamat, email, text dan lainnya. Oh iya, Library Faker ini sudah include ketika kita install CodeIgniter 4, jadi kita tidak perlu install secara manual. Untuk memastikan, kita bisa buka file composer.json.

{  
    "name": "codeigniter4/appstarter",  
    "type": "project",  
    "description": "CodeIgniter4 starter app",  
    "homepage": "https://codeigniter.com",  
    "license": "MIT",  
    "require": {  
        "php": "^7.4 || ^8.0",  
        "codeigniter4/framework": "^4.0"  
    },  
    "require-dev": {  
        "fakerphp/faker": "^1.9",  
        "mikey179/vfsstream": "^1.6",  
        "phpunit/phpunit": "^9.1"  
    },  
    "suggest": {  
        "ext-fileinfo": "Improves mime type detection for files"  
    },  
    "autoload": {  
        "exclude-from-classmap": [  
            "**/Database/Migrations/**"  
        ]  
    },  
    "autoload-dev": {  
        "psr-4": {  
            "Tests\\Support\\": "tests/_support"  
        }  
    },  
    "scripts": {  
        "test": "phpunit"  
    },  
    "support": {  
        "forum": "http://forum.codeigniter.com/",  
        "source": "https://github.com/codeigniter4/CodeIgniter4",  
        "slack": "https://codeigniterchat.slack.com"  
    }  
}

Bisa kita perhatikan di bagian require-dev, terdapat library fakerphp/faker yang sudah terinstall.

Daftar Isi

  1. Web App Overview
  2. Step 1: Instalasi CodeIgniter 4
  3. Step 2: konfigurasi project
  4. Step 3: Membuat database
  5. Step 4: Membuat file migration
  6. Step 5: Membuat database seeder
  7. Step 6: Run database seeder
  8. Kesimpulan
  9. Referensi

Web App Overview

Pada tutorial Database Seeder CodeIgniter 4 ini kita akan membuat sample project untuk keperluan generate dummy data. Data yang akan kita coba generate adalah data users. Di dalam tabel users ini nanti ada field untuk id, name, email, dan password.

Output sample project ini adalah berupa data yang berhasil digenerate ketika database seeder kita run. Kita bisa pastikan apakah data sudah berhasil digenerate dengan mengecek table users.

Step 1 - Instalasi CodeIgniter 4

Langkah pertama adalah instalasi codeigniter 4. Dalam proses instalasi codeigniter 4, cara yang akan digunakan adalah instalasi menggunakan composer. Hal ini dilakukan supaya kita terbiasa menggunakan composer, dan boleh jadi nanti kedepannya kita bisa buat library sendiri.

Sekarang kita buka terminal atau cmd. Di dalam terminal eksekusi composer command ini:

composer create-project codeigniter4/appstarter dbseeder-example

Seperti yang kita lihat, nama project kita cukup sederhana dbseeder-example, disesuaikan dengan tujuan tutorial ini. Oke seperti biasa kita tunggu proses instalasinya selesai.

Step 2 - konfigurasi project

Pada tahapan kedua ini kita akan mengatur konfigurasi project, seperti database dan base url. Sebagai pengingat ada beberapa cara untuk mengatur konfigurasi. Yang pertama itu kita bisa atur langsung konfigurasi yang ada di direktori app/Config, seperti pengaturan base url di file App.php atau database di file Database.php yang ada di direktori tersebut. Cara kedua adalah kita atur semua konfigurasi di file .env. Di tutorial ini kita akan pakai cara kedua, supaya terbiasa mengatur konfigurasi untuk keperluan di environment production dan supaya credentials seperti akun database tidak ikut ke push ketika kita menggunakan git repositori seperti github atau gitlab.

Sebelum mengatur konfigurasi, kita pindah dulu ke direktori project, yaitu dbseeder-example. Eksekusi command ini di terminal, untuk pindah ke direktori project:

cd dbseeder-example

Kalau kita perhatikan di dalam folder project kita terdapat beberapa file, diantaranya file env (tanpa tanda titik). Kita copy file ini env ini, lalu kita rename menjadi .env. Buka lagi terminalnya lalu jalankan command ini untuk copy file env menjadi file .env.

cp env .env

Setelah command di atas dieksekusi, kita bisa lihat file baru dengan nama .env.

Selanjutnya kita buka project kita di text editor. kita bisa open folder di text editor langsung. Kalau text editor yang digunakan visual studio code, bisa juga ketik command ini untuk buka project di visual studio code.

code .

Selanjutnya buka file .env yang sebelumnya sudah kita copy. Di dalamnya cari baris kode ini.

# CI_ENVIRONMENT = production

# app.baseURL = ''

# database.default.hostname = localhost
# database.default.database = ci4
# database.default.username = root
# database.default.password = root
# database.default.DBDriver = MySQLi

hapus tanda #, lalu sesuaikan menjadi seperti ini:


CI_ENVIRONMENT = development

app.baseURL = 'http://localhost:8080/'

database.default.hostname = localhost
database.default.database = db_ci4
database.default.username = root
database.default.password = passwordmysqlkita
database.default.DBDriver = MySQLi

Bisa kita lihat di baris kode di atas, kita atur environmentnya CI_ENVIRONMENT menjadi development, supaya jikalau seandainya nanti ada error, petunjuk errornya ini bisa langsung ditampilkan di browser. Konfigurasi selanjutnya adalah base url atau app.baseURL dan juga konfigurasi database. Untuk konfigurasi database, nama databasenya db_ci4 dan untuk username & passwordnya sesuaikan dengan username & password yang kamu gunakan.

Jangan lupa, save file .env.

Step 3 - Membuat database

Setelah pengaturan database selesai, langkah berikutnya adalah membuat database. Buka phpMyAdmin, lalu buat database baru dengan nama db_ci4. Ya, nama databasenya sesuai dengan nama database yang ada di file .env yang sebelumnya sudah kita modifikasi.

Step 4 - Membuat file migration

Untuk pembuatan tabel, kita ga langsung buat tabelnya melalui phpMyAdmin. Di sini kita belajar membuat tabel menggunakan migration punya codeigniter 4. Nah sebagai contoh untuk nama tabelnya adalah users.

Kita buka kembali terminal, lalu eksekusi spark command ini:

php spark migrate:create Users

Command di atas adalah command untuk membuat file migration baru. Kita cek filenya di direktori app/Database/Migrations. Nah di direktori tersebut ada file dengan format nama YYYY-MM-DD-HHIISS_namatable.php. File hasil generate secara otomatis ketika tutorial ini dibuat 2020-12-27-145550_Users.php. Ya kita buka filenya, lalu kita modifikasi method up() dan method down().

<?php namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class Users extends Migration
{
    public function up()
    {
        $this->forge->addField([
            'id' => [
                'type' => 'INT',
                'unsigned' => TRUE,
                'auto_increment' => TRUE
            ],
            'name' => [
                'type' => 'VARCHAR',
                'constraint' => 255,
                'null' => FALSE,
            ],
            'email' => [
                'type' => 'VARCHAR',
                'constraint' => 255,
                'null' => FALSE,
                'unique' => TRUE,
            ],
            'password' => [
                'type' => 'VARCHAR',
                'constraint' => 255,
                'null' => FALSE,
            ],
            'created_at' => [
                'type' => 'datetime',
                'null' => TRUE
            ],
            'updated_at' => [
                'type' => 'datetime',
                'null' => TRUE
            ]
        ]);

        $this->forge->addKey('id', TRUE);
        $this->forge->createTable('users');
    }

    //--------------------------------------------------------------------

    public function down()
    {
        $this->forge->dropTable('users');
    }
}

Setelah selesai ketik baris kode di atas. Save kembali file migrationnya. Selanjutnya kita run perintah migrate di terminal. Buka terminal, lalu eksekusi command ini:

php spark migrate

Setelah selesai, kita bisa lihat di database db_ci4 ada dua tabel baru yaitu tabel migrations dan juga tabel users.

Step 5 - Membuat database seeder

Tahapan berikutnya adalah inti dari tutorial ini yaitu membuat database seeder. Kita buat file seeder di direktori app\Database\Seeds dengan nama UsersSeeder.php atau kita bisa juga coba gunakan spark command di bawah ini untuk generate file seeder.

php spark make:seeder UsersSeeder

Selanjutnya kita sesuaikan baris kode berikut ini di dalam file seeder yang baru saja dibuat.

<?php

namespace App\Database\Seeds;

class UsersSeeder extends \CodeIgniter\Database\Seeder
{
    public function run()
    {
        $faker = \Faker\Factory::create('id_ID');

        for ($i = 0; $i < 100; $i++) {
            $gender = $faker->randomElements(['male', 'female'])[0];

            $data = [
                'name' => $faker->firstName($gender),
                'email' => $faker->email,
                'password' => password_hash('1234567', PASSWORD_DEFAULT),
                'created_at' => date("Y-m-d H:i:s"),
            ];
            print_r($data);
            $this->db->table('users')->insert($data);
        }
    }
}

Save kembali file seeder UsersSeeder.php.

Seperti yang bisa kita lihat di baris kode di atas. Nama filenya disesuaikan dengan nama class, yaitu UsersSeeder. Class UsersSeeder ini kita jadikan turunan dari parent class \CodeIgniter\Database\Seeder.

Untuk generate dummy data, kita gunakan library Faker, yang sudah terinstall ketika kita install CodeIgniter. Sebagai contoh data yang kita generate ada 99 data. Dan untuk melakukan proses insert data, kita gunakan query builder.

Step 6 - Run database seeder

Selanjutnya kita coba running seeder untuk generate dummy data. Buka kembali terminal, lalu eksekusi spark command:

php spark db:seed UsersSeeder

Setelah command di atas selesai dieksekusi, kita bisa lihat output seperti di bawah ini.

**dbseeder-example** **git:(****main****)** **✗** php spark db:seed UsersSeeder

CodeIgniter v4.2.10 Command Line Tool - Server Time: 2022-12-19 17:38:06 UTC-06:00

Seeded: App\Database\Seeds\UsersSeeder

Array

(

    [name] => Kamaria

    [email] => [email protected]

    [password] => $2y$10$5ZdTp75uHYOUXWFLN0luxuayHzo5UUOf6zN7di8BAf79GcraHYacO

    [created_at] => 2022-12-19 17:38:06

)

Array

(

    [name] => Jasmin

    [email] => [email protected]

    [password] => $2y$10$yAWAl8FHVMoREdS3/BGMSu7mCHiqOdQJrJilfIZoWRtt/U7KI4nJu

    [created_at] => 2022-12-19 17:38:06

)

... dan output lainnya

Untuk memastikan apakah data nya berhasil di-generate dan berhasil disimpan di database, kita bisa buka phpmyadmin dan kita cek table users. Ya, datanya tersimpan sebanyak data yang sudah kita atur di file UsersSeeder.php.

Kesimpulan

Adakalanya kita perlu sample data pada saat testing web yang kita kembangkan maupun pada saat development. Data yang kita perlukan itu kadang tidak hanya lima baris data. Kadang bisa ratusan, kadang bisa ribuan. Kombinasi Database Seeding di CodeIgniter 4 dan library Faker ini memudahkan kita sebagai developer untuk generate dummy data yang bisa kita gunakan untuk keperluan development.

Solusi ini sudah bermanfaat untukku. Kawan, semoga bermanfaat untukmu juga.

Referensi

Gun Gun Priatna
Software Engineer, Content Writer and Founder qadrlabs.com
Komentar

blog comments powered by Disqus