Migration adalah fasilitas bawaan laravel untuk mempermudah kita dalam mengatur perubahan di dalam database.

Fasilitas ini sangat berguna untuk kita membuat aplikasi dalam sekala besar dan bertim, dengan migration kita tidak perlu membuat tabel manual di phpmyadmin jika ingin menjalankan aplikasi di komputer yang lain cukup jalankan perintah migration nanti akan membuat tabel secara otomatis sesuai schema tabel yang sudah dibuat sebelumnya tanpa harus import / export database.

Schema adalah struktur dari tabel yang akan kita buat, misalnya menentukan kolom / field, mengatur relasi, dan menentukan tipe data dalam suatu tabel.

Sekarang kita membuat schema dan migration di laravel, kita akan buat tabel baru bernama posts. Silahkan jalankan perintah berikut :

php artisan make:migration create_posts_table --create=posts

Setelah berhasil, akan terdapat file baru bernama xxx_create_posts_table.php di folder database>migrations.

membuat tebel posts

Buka file tersebut, kemudian salin dan paste script dibawah ini :

<?php

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

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('judul');
            $table->string('slug');
            $table->text('body');
            $table->unsignedInteger('user_id'); // kita sesuaikan dengan attribute yang ada di tabel users
            $table->foreign('user_id')->references('id')->on('users'); //relasi ke tabel user
            $table->timestamps();
        });
    }

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

Kita membuat sebuah tabel baru bernama posts dengan relasi many to one ke tabel user.

Setiap post hanya dimiliki oleh satu user, kalau di laravel bisa pakai hasOne atau belongsTo. Ini akan kita bahas nanti pada tutorial belajar relasi di laravel.

Jangan lupa untuk disimpan kemudian kita jalankan perintah "php artisan migrate" untuk melakukan migrate database.

Kemudian cek di phpmyadmin, jika berhasil akan ada tabel baru bernama posts dengan kolom yang sesuai dengan schema yang telah kita buat.

tabel posts

lalu gimana caranya untuk menambahkan kolom baru di tabel yang sudah ada di laravel?

Contoh kasus : misalnya setiap post mempunyai kategori, maka kita harus membuat tabel baru yaitu tabel kategori, kemudian menambahkan kolom baru bernama kategori_id ke dalam tabel posts.

Oke, mari kita coba membuat tabel kategori terlebih dahulu. Silahkan jalankan perintah berikut :

php artisan make:migration create_category_table --create=category

Kemudian salin dan paste script berikut pada file migrations xxx_create_category_table.php yang baru kita buat dan simpan :

<?php

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

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

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

Jalankan perintah "php artisan migrate" lagi, untuk menambah tabel kategori melalui migration laravel.

Setelah itu kita menambahkan kolom baru pada tabel yang sudah ada yaitu tabel posts.

Jalankan perintah berikut :

php artisan make:migration add_category_id_to_posts

Kemudian buka file migrations yang baru kita buat, salin dan paste script dibawah ini ke dalam file xxx_add_category_id_to_posts.php :

<?php

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

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

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->dropColumn('category_id');
        });
    }
}

Setelah itu jangan lupa untuk melakukan migrate lagi, dengan menjalankan perintah "php artisan migrate".

Sekarang coba kita cek di tabel posts melalui phpmyadmin.

menambahkan kolom baru di laravel

Taraa... kolom category_id sudah berhasil ditambahkan ke dalam tabel posts.

Nah itulah tutorial migration dan schema di laravel. Semoga mudah dipahami dan tetap semangat belajarnya ya..


Wahyu Prasetyo
Wahyu Prasetyo Hanya manusia biasa yang berilmu dan ingin bermanfaat untuk orang lain.