Tanggal :3 Desember 2020
Migration di Laravel

Belajar Laravel : Migration di Laravel

Artikel ini bagian ke 4 dari 6 seri dalam artikel berseri "Belajar Laravel"

Apa itu Migration ?

Assalamualaikum Warohmatulloh Wabarokatuh, setelah menginstal Laravel selanjutnya kita akan membuat tabel untuk aplikasi yang akan kita buat. Di Laravel untuk membuat tabel bisa menggunakan migration. Apa itu migration dan bagaimana cara membuat migration di Laravel ?

Jadi migration secara gampang adalah sebuah version control untuk database. Kalau kawan-kawan sudah familiar dengan git, migration ini layaknya git untuk database. Daripada bingung yuk kita action.

Sebelum membuat migration, perlu diketahui bahwa file migration itu lokasinya berada di folder database/migrations. Nah, kalau kawan-kawan mengintip kesana, akan ada 2 file migration dari bawaan Laravel atau mungkin 3 tergantung versi Laravelnya.

Membuat Migration di Laravel

Untuk membuat migration kita bisa lakukan dengan perintah Artisan. Apalagi itu Artisan? Jadi Artisan itu adalah sebuah Command Line Interface dari Laravel yang akan membantu kawan-kawan membuat file / class dalam proyek Laravel dan juga fungsi lainnya. Untuk menjalankan perintah Artisan, pastikan bahwa terminal / command prompt kawan-kawan ada di folder utama proyek Laravel. Kita bisa memanggil Artisan dengan php artisan.

Kita pelajari sedikit konvensi di Laravel untuk membuat migration ya, perhatikan perintah artisan di bawah ini.

php artisan make:migration create_tablename_table

Untuk membuat tabel dalam penamaan migration awali dengan create_ selanjutnya nama tabel dan diakhiri dengan _table. Dengan mengikuti konvensi ini Laravel akan membuatkan kerangkan pada method up() dan down() pada file yang dibuat. Contoh saya buat sebuah tabel dengan nama posts maka saya beri nama migrationnya create_posts_table.

php artisan make:migration create_posts_table

Maka file yang dibuat kurang lebih isinya seperti ini.

<?php

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

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

Beda cerita jika saya memberi nama membuat_tabel_posts.

 php artisan make:migration membuat_tabel_posts

Maka file yang dibuat akan seperti ini isinya.

<?php

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

class MembuatTabelPosts extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}

Terlihat ya perbedaannya yang pertama kita disediakan “kerangka” dimana kita tinggal melanjutkan untuk menuliskan migration yang diinginkan. Sebenarnya bisa saja kita buat dengan nama sesuka hati dan tetap memiliki “kerangka” yang sama dengan menambahkan flag --create=namatabel. Contoh dengan nama yang sama seperti di atas tapi dengan flag.

php artisan make:migration membuat_tabel_posts --create=posts

Hasilnya akan seperti ketika kita menggunakan konvensi create_posts_table.

<?php

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

class MembuatTabelPosts extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

Perlu diketahui untuk membuat tabel kita akan mendefinisikan kolomnya pada method up(). Misalnya untuk posts saya akan menambahkan 3 kolom, user_id untuk foreign key, title untuk judul dengan tipe VARCHAR, slug untuk kebutuhan SEO dengan tipe VARCHAR dan UNIQUE dan body untuk isi konten pos / artikelnya dengan tipe TEXT.

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->foreignId('user_id')->constrained();
        $table->string('title');
        $table->string('slug')->unique();
        $table->text('body');
        $table->timestamps();
    });
}

Kurang lebih seperti itu isi dari method up() untuk tabel posts yang akan dibuat.

Menjalankan Migration

Sebelum menjalankan migration, karena proyek kita masih baru maka kita harus sesuaikan konfigurasinya terlebih dulu pada file .env. Pada bagian DB_ silakan disesuaikan dengan konfigurasi di laptop / komputer masing-masing.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=

Oke, setelah beres dengan konfigurasi sekarang saatnya menjalankan migration. Tentu dengan Artisan.

php artisan migrate

Setelah dijalankan, akan ada pemberitahuan bahwa migration sukses dijalankan.

Migration di Laravel

Setelah itu akan ada tabel posts yang terbuat di database kita.

Migration Rollback

Setelah membahas tentang membuat tabel, bagaimana jika ada kesalahan dalam penamaan kolom atau pemberian tipe data pada kolom? Tenang, ada migrate:rollback.

Rollback akan menjalankan method down() yang biasanya berisi dari kebalikan method up(). Jika up() membuat tabel maka down() akan menghapus tabel.

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

Untuk menjalankan rollback, kita bisa gunakan perintah migrate:rollback.

php artisan migrate:rollback

Muncul pemberitahuan bahwa rollback sukses dijalankan.

Migration Rollback di Laravel

Setelah itu tabel posts akan terhapus dari database.

Tabel migrations

Sebenarnya ketika kita menjalankan migration, ada satu tabel yang ikut dibuat oleh Laravel. Tabel ini tidak terdefinisi pada file migration. Nama tabelnya migrations. Lalu apa dan fungsinya apa tabel migrations ini. Perhatikan gambar di bawah ini untuk mengetahui struktur dan isi dari tabel migrations.

Seperti yang terlihat ada 3 kolom pada tabel migrations yaitu id, migration, batch.

  • Kolom id seperti biasanya hanya sebuah primary key.
  • Kolom migration menyimpan nama dari file migration yang jika nama dari file sudah tercatat dalam tabel maka migration tersebut tidak bisa dijalankan lagi.
  • Kolom batch adalah mencatat sekumpulan / gelombang migration yang dijalankan. Pada gambar di atas, karena pertama kali dijalankan maka semua migration ada dalam satu batch yaitu bacth 1. Jika kita membuat migration baru dan menjalankannya maka akan dicatat sebagai batch 2. Kolom batch juga berguna untuk rollback, rollback akan dijalankan untuk batch terakhir saja, pada gambar di atas, karena hanya ada satu batch, maka ketika dijalankan semua yang termasuk dalam batch 1 akan dirollback.

Sekian penjelasan yang cukup panjang tentang migration, semoga bisa menjelaskan secara detail tentang migration di Laravel.

Wassalamualaikum Warohmatulloh Wabarokatuh.

Halo semuanya, saya Amirul seoarang Web Developer, suka membuat konten pembelajaran berupa artikel, video tutorial maupun podcast, saya juga suka makan dan foto makanan.

2 Pings & Trackbacks

  1. Pingback: Belajar Laravel : Memahami Routing Laravel - Kawan Koding

  2. Pingback: Mengganti Migration Codeigniter 4 - Kawan Koding

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *