Tutorial Laravel 9 - Part #6 - Database Migration

Fitur database migration dalam Laravel adalah semacam tool yang digunakan untuk manajemen versi database dari sebuah project. Ini menjadi hal penting yang perlu dipelajari setelah kita bisa melakukan Instalasi Laravel 9 dengan lancar. Mari kita pelajari dengan seksama.

Membuat File Migration

Untuk membuat migration jalankan perintah berikut pada terminal:

php artisan make:migration create_products_table

Perintah di atas akan menghasilkan file migration yang terletak pada folder database/migrations. File tersebut memuat class yang meng-extend class Migration dari Laravel. Di dalam class tersebut terdapat 2 fungsi utama yang up() dan down(). Fungsi up() akan menghandle aksi yang dilakukan dalam migration. Sedangkan fungsi down() akan membalikkan (reverse) aksi dalam migration tersebut.

<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class new class extends Migration
{
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->uuid('id')->primary();
            $table->string('sku')->index();;
            $table->string('name');
            $table->decimal('price', 15, 2)->nullable();
            $table->integer('stock')->default(0);
            $table->timestamps();
        });
    }

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

Mengenal Run dan Rollback Migration

Untuk mengeksekusi migration jalan perintah berikut pada terminal:

php artisan migrate

Untuk mundur/mengembalikan ke migration sebelumnya kita dapat menggunakan perintah berikut:

php artisan migrate:rollback

Atau kita juga dapat mundur/mengembalikan ke migration sebelumnya sebanyak langkah yang kita inginkan. Misal, kita ingin mundur ke migration 3 step dari migration terakhir, maka perintahnya adalah:

php artisan migrate:rollback --step=3

Menambah dan Mengubah Kolom dalam Tabel

Untuk menambah atau mengubah kolom dalam tabel kita perlu membuat sebuah file migration. Oleh karena itu usahakan penamaan file migration itu deskriptif dengan apa yang akan kita lakukan.

php artisan make:migration add_description_column_in_products_table

Kemudian untuk isi dari file migration untuk menambah kolom deskrispi adalah sebagai berikut:

<?php

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

class new class extends Migration
{
    public function up()
    {
        Schema::table('products', function (Blueprint $table) {
            $table->text('description')->nullable();
        });
    }

    public function down()
    {
        Schema::table('products', function (Blueprint $table) {
            $table->dropColumn('description');
        });
    }
}

Mengubah Nama Kolom dalam Tabel

Migration untuk mengubah nama kolom dalam tabel adalah seperti berikut:

Schema::table('users', function (Blueprint $table) {
    $table->renameColumn('from', 'to');
});

Menambahkan Foreign Key Constraint

Kita juga dapat menambahkan Foreign Key Constraint pada tabel yang mempunya relasi. Sebagai contoh tabel products di bawah mempunya relasi ke tabel users , Maka migration nya akan menjadi seperti berikut:

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

class new class extends Migration
{
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->uuid('id')->primary();
            $table->string('sku')->index();;
            $table->string('name');
            $table->decimal('price', 15, 2)->nullable();
            $table->integer('stock')->default(0);
            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users');
        });
    }

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

Untuk mempelajari lebih detail tentang migration, kalian dapat membuka langsung di dokumentasi resmi Laravel Migration.

Selamat mencoba!

Tulis Komentar