Salah satu fitur yang sangat saya sukai dari Lumen (dan tentu saja Laravel) adalah Migrations. Singkatnya, fitur ini akan sangat mempermudah tugas pembuatan dan pelacakan database schema. Tapi sebelumnya, bagi Anda yang belum pernah mendengar istilah database schema sama sekali, saya sarankan Anda untuk mempelajari materi terkait database terlebih dahulu. Salah satu tempat belajar database yang saya rekomendasikan adalah https://www.w3schools.com/sql/.

Catatan : pemahaman tentang database sangat vital dalam pembuatan REST API di sisi backend. Minimal, Anda perlu tahu cara melakukan CRUD – Create, Read, Update dan Delete database beserta table-nya.

Membuat Database

Langkah pertama untuk mengetahui cara kerja migrations pada Lumen, tentu saja dengan membuat / mempersiapkan database baru – saya asumsikan Anda telah memiliki instalasi DBMS (Database Management System), jika belum, caranya dapat Anda baca di Cara Install Apache, PHP, MySQL di macOS dan Linux. Pembuatan database baru dapat dilakukan melalui CLI (Command Line Interface) maupun dengan menggunakan tool administrasi database seperti phpMyAdmin atau MySQL Workbench.

Informasi database yang akan kita buat adalah sebagai berikut :

  • host : 127.0.0.1
  • port : 33060 (MySQL)
  • database : variancode
  • username : variancode
  • password : ehrahasiadong

Melalui terminal, ketik perintah MySQL-CLI berikut untuk login sebagai user root :

mysql -uroot -p

Setelah memasukkan password dan login, buat username MySQL baru variancode berserta password-nya :

CREATE USER 'variancode'@'localhost' IDENTIFIED BY 'ehrahasiadong';

Buat database MySQL baru bernama variancode :

CREATE DATABASE variancode;

Berikan akses penuh ke database variancode untuk username variancode :

GRANT ALL PRIVILEGES ON variancode.* TO 'variancode'@'localhost';

Akhiri dengan :

FLUSH PRIVILEGES;

Untuk memastikan privileges yang dimiliki oleh username variancode, gunakan perintah :

SHOW GRANTS FOR 'variancode'@'localhost';

Agar lebih jelas, urutan eksekusi perintah MySQL-CLI dapat dicocokan dengan gambar di bawah :

database migrations pada lumen laravel

Menggunakan Migrations

Sebelum membuat tabel database sepak_bola melalui Lumen, kita harus terlebih dahulu membuat file untuk database migration-nya. Dari root project Lumen Anda di /Users/username_macos_anda/Sites (macOS) atau /home/linuxbrew/.linuxbrew/var/www (Linux), ketik perintah php artisan berikut :

php artisan make:migration create_sepak_bola_table
database migrations pada lumen laravel

Jika berhasil, file migration yang telah dibuat dapat ditemukan di folder database/migrations/ projek Lumen Anda.

database migrations pada lumen laravel

Pada class CreateSepakBolaTable di atas, database schema dibuat melalui method public function up().

Rubah schema di class tersebut dengan menambahkan dua kolom baru bertipe string, masing-masing adalah klub dan pemain – panjang karakter 191. Penambahan parameter unique() pada kolom pemain berarti nama pemain harus unik / tidak boleh ada yang sama. Kemudian tipe data BIGINT pada bigIncrements('id') juga saya ganti menjadi INT dengan increments('id').

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateSepakBolaTable extends Migration {
    
    public function up() {
        Schema::create('sepak_bola', function (Blueprint $table) {
            
            $table->increments('id');

            $table->string('klub', 191);
            $table->string('pemain', 191)->unique();

            $table->timestamps();
            
        });
    }

    public function down() {
        Schema::dropIfExists('sepak_bola');
    }

}

Perintah increments('id') digunakan untuk membuat kolom id dan sekaligus mengesetnya sebagai auto-increment primary key. Sedangkan timestamps adalah method khusus dari Lumen / laravel yang digunakan untuk membuat kolom created_at (waktu row pertama kali dibuat) dan updated_at (waktu row terakhir diperbarui).

DBMS MySQL versi 5.6 dan sebelumnya hanya mendukung penggunaan string dengan panjang maksimal 191 karakter. Oleh karena itu, saya sengaja menyertakan nilai 191 seperti pada kolom string('klub', 191) dan string('pemain', 191). Cara lainnya bisa dengan mengedit file AppServiceProvider.php di folder app/Providers/, tambahkan panjang string default ke dalam method boot.

use Illuminate\Support\Facades\Schema;

public function boot() {
    Schema::defaultStringLength(191);
}

Setelah perubahan pada file migration diatas tersimpan, lanjutkan dengan mengetikkan perintah php artisan berikut :

php artisan migrate

Jika Anda mendapati pesan error seperti :

[ErrorException]
include(/Users/rian/Sites/database/migrations/2020_02_24_082243_create_sepak_bola_table.php): 
failed to open stream: No such file or directory

Ketik perintah berikut untuk memperbaiki semua class di dalam projek Lumen :

composer dump-autoload -o

Atau jika pesan error yang muncul seperti ini :

database migrations pada lumen laravel

Cara mengatasinya, edit file .env pada root project, ganti nilai DB_DATABASE, DB_USERNAME dan DB_PASSWORD sesuai informasi database yang telah disebutkan sebelumnya.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=variancode
DB_USERNAME=variancode
DB_PASSWORD=ehrahasiadong

Jalankan kembali perintah php artisan migrate sebelumnya :

database migrations pada lumen laravel

Setelah migration dilakukan, kita akan memiliki dua tabel baru bernama migrations (bawaan Lumen / Laravel) dan sepak_bola.

database migrations pada lumen laravel
GUI untuk DBMS menggunakan aplikasi MySQLWorkbench