Cara Membuat Migration Laravel
0 Comments
24 Maret 2022

Cara Membuat Migration Laravel – Tutorial Laravel 2

Hai kembali lagi di kodekreasi.com pada seri belajar laravel 9 . Pada tutorial sebelumnya kita telah mempelajari tentang cara install laravel untuk tutorial kali ini kita akan mempelajari tentang cara membuat migration laravel serta kegunaan dari migration pada laravel 9. Namun terlebih dahulu sebelum kita mempelajari cara membuat migration di laravel alangkah lebih baiknya jika kita berkenalan terlebih dahulu dengan apa itu migration pada laravel?.

Apa itu Migration Pada Laravel ?

Menurut dokumentasi resmi dari laravel migration merupakan version control untuk database sehingga kalian tidak perlu berhubungan langsung dengan database ketika ingin melakukan operasi pada database seperti menambahkan field atau kolom pada database dan lain-lain. Tujuan utama dari adanya fitur ini adalah untuk memudahkan tim anda dalam menentukan dan berbagi definisi skema database pada aplikasi yang sedang kalian bagun bersama tim anda . Apa itu maksud dari tujuanya bang kok saya masih belum paham? … hee.. Oke saya akan jabarkan sekali lagi secara lebih rinci.. Jika anda seorang pengembang software atau bahasa kerennya software developer yang sering bekerja secara team tentu kalian sering menemui permasalahan disaat merancang sebuah database yang akan digunakan dalam aplikasi yang sedang kalian buat bersama team kalian. Permasalahan yang saya maksud disini adalah permasalahan seperti kesulitan koordinasi saat ada anggota team kalian yang sedang melakukan penambahan tabel atau memodifikasi tabel maka seluruh anggota team harus ikut mengupdate database lokal mereka secara manual atau mereka harus mengimport tabel sql dari teman kalian yang telah melakukan update database. Tentu hal itu sangat melelahkan bukan jika disetiap ada anggota team yang merubah database kalian harus ikut merubah database lokal kalian. Apalagi bagi teman kalian yang telah mengupdate database pada aplikasi yang team anda sedang buat , dia harus memberitahukan proses update yang dia lakukan ke anggota team yang lain tentu hal ini akan menjadi bermasalah jika proses koordinasi antara anggota team tidak berjalan lancar. Untuk itu dibuatlah fitur migration yang akan membantu kalian untuk mengatasi permasalahan tersebut dimana jika sebelumnya kita harus melakukan update manual jika ada anggota team yang melakukan perubahan pada database ,dengan adanya fitur ini jika ada perubahan pada database, anggota yang lain tinggal melakukan pull scribt program mereka dari github atau gitlab kemudian untuk menyamakan tabelnya tinggal menjalankan php artisan migrate:refresh sehingga tabel-tabel pada database kalian semua akan direfresh dan disamakan seperti perubahan terakhir yang telah dibuat oleh teman kalian.

Cara Membuat Migration Laravel

Pada tutorial ini kita akan menggunakan project laravel 9 yang telah kita install sebelumnya kemudian buka folder project kalian menggunakan text editor kesayangan kalian . Pada tutorial ini saya menggunakan text editor visual studio code.

Langkah yang kedua buka file .env pada project laravel kalian menggunakan text editor kemudian rubah settingan databasenya menjadi seperti dibawah ini .

Catatan : pada bagian database,username serta password sesuaikan dengan database yang telah kalian buat serta username dan password database pada komputer kalian masing-masing.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1             
DB_PORT=3306                  
DB_DATABASE=belajar_laravel   # nama database yang akan kita buat
DB_USERNAME=root           # username dari database mysql kalian (defaultnya root)
DB_PASSWORD=             # password dari database mysql kalian (defaultnya kosong)

Selanjutnya , untuk menambahkan file migration baru silakan buka cmd atau terminal kalian kemudian masuk ke directori project laravel kalian. Setelah itu jalankan perintah seperti dibawah ini pada terminal atau CMD kalian.

php artisan make:migration create_mahasiswa_tabel

Penjelasan :

Perintah diatas digunakan untuk membuat sebuah file migration baru pada folder database->migrations . create_mahasiswa_tabel merupakan nama file migration yang akan kita tambahkan , kalian dapat mengganti nama file migrationnya sesuai dengan kebutuhan kalian.

Setelah scribt diatas dijalankan maka akan ada sebuah file migration tambahan didalam folder migration. Untuk mengeceknya silakan masuk ke folder database pada directory project kalian kemudian masuk ke folder migration maka akan didapati sebuah file baru seperti pada gambar dibawah ini:

cara membuat migration laravel

Secara default didepan nama file migration yang kita buat akan ditambahkan timestamp yang menandakan waktu pembuatan file migration kalian. Selain itu terdapat juga file migration authentikasi yang secara default sudah menjadi bawaan dari laravel seperti create_users_table , creat_password_resets_table dll.

Selanjutnya buka file migration mahasiswa yang tadi kalian buat pada text editor kalian. Pada function up() modifikasi isinya menjadi seperti berikut ini :

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('mahasiswa_tabel', function (Blueprint $table) {
            $table->id();
            $table->string('nim',10);
            $table->string('nama',50);
            $table->text('alamat');
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('mahasiswa_tabel');
    }
};

Penjelasan :

Untuk sedikit penjelasan didalam function up() berisi sebuah objek untuk membuat sebuah tabel baru pada database dengan nama mahasiswa_tabel . Sedangkan isi dari tabel mahasiswa_tabel sendiri diisi dengan field-field nim,nama, alamat dan untuk id serta timestamp() sendiri merupakan default bawaan dari laravel. id() akan membuat sebuah field baru dengan nama id yang isinya autoincrement() dengan tipe data bigInteger dan merupakan primary key. Sedangkan timestamp() akan mengenerate dua buah field baru pada database dengan nama created_at dan updated_at.

Untuk membuat field baru dengan tipe data selain yang telah saya sebutkan diatas kalian dapat melihatnya pada tabel dibawah ini :

$table->bigIncrements('id');Untuk menambahkan field dengan nama id yang mempunyai type data bigInteger dan auto increment
$table->bigInteger('votes');
Untuk menambahkan field dengan nama votes yang mempunyai type data bigInteger
$table->boolean('confirmed');Untuk menambahkan field dengan nama confirmed yang mempunyai type data boolean (true atau false)
$table->char(‘name’, 100);Untuk menambahkan field dengan nama name yang mempunyai type data char yang mempunyai panjang maksimal 100 karakter
$table->dateTime(‘created_at’, $precision = 0);Untuk menambahkan field dengan nama created_at yang mempunyai type data dateTime
$table->date(‘created_at’);Untuk menambahkan field dengan nama created_at yang mempunyai type data date
$table->decimal(‘amount’, $precision = 8, $scale = 2);Untuk menambahkan field dengan nama amount yang mempunyai type data decimal dengan $precision yang berisi total digits dan scale yang berisi decimal digits
$table->double(‘amount’, 8, 2);Untuk menambahkan field dengan nama amount yang mempunyai type data double dan parameter ke 2 berisi total digits sedangkan parameter ke 3 berisi decimal digits
$table->enum(‘difficulty’, [‘easy’, ‘hard’]);Untuk menambahkan field dengan nama difficulty yang mempunyai type data enum dengan valid value easy atau hard.
$table->float(‘amount’, 8, 2);Untuk menambahkan field dengan nama amount yang mempunyai type data float dan parameter ke 2 berisi total digits sedangkan parameter ke 3 berisi decimal digits
$table->increments(‘id’);Untuk menambahkan field dengan nama id yang mempunyai type data integer dan auto increment
$table->integer(‘votes’);Untuk menambahkan field dengan nama votes yang mempunyai type data integer
$table->json(‘options’);Untuk menambahkan field dengan nama options yang mempunyai type data json
$table->smallInteger(‘votes’);Untuk menambahkan field dengan nama votes yang mempunyai type data smallInteger
$table->string(‘name’, 100);Untuk menambahkan field dengan nama name yang mempunyai type data string yang mempunyai panjang maksimal 100 karakter
$table->text(‘description’);Untuk menambahkan field dengan nama description yang mempunyai type data text

Sebenarnya masih banyak banyak lagi function-function yang dapat kalian gunakan selain pada tabel diatas untuk lebih lengkapnya kalian dapat membukanya langsung pada dokumentasinya laravel .

Laravel Migrate All Table

Untuk menjalankan seluruh file migration yang berada pada folder migration , silakan buka terminal atau cmd kalian dan masuk kembali ke folder project kalian kemudian ketikkan perintah berikut untuk menjalankan seluruh file migration yang telah kita buat .

php artisan migrate

Perintah diatas akan menjalankan seluruh file migration yang berada didalam folder migration dan berikut adalah hasilnya :

Tutorial Laravel 2 - cara membuat migration laravel

Selanjutnya kita periksa database kita melalui phpMyAdmin atau Adminer kalian, berikut adalah hasinya :

Tutorial Laravel 2 - cara membuat migration laravel

Lihat gambar diatas ketika kita buka database yang telah kita buat sebelumnya akan ada tabel-tabel yang telah kita definisikan difile migration . Tabel-tabel itu akan terbentuk saat kita menjalankan migration kita dengan menggunakan perintah php artisan migrate tanpa kita harus menambahkanya secara manual melalui phpMyAdmin atau adminer.

Cara menghapus migration Laravel

Cara menghapus migration laravel dapat dilakukan dengan menjalankan perintah berikut ini pada terminal atau CMD kalian untuk menghapus tabel-tabel hasil dari migration tadi .

php artisan migrate:rollback

Maka akan didapati hasil seperti berikut ini jika prosesnya berhasil :

laravel migration

Selanjutnya coba cek lagi database kalian melalui phpMyAdmin atau Adminer . Maka hasilnya akan seperti gambar dibawah ini . Semua tabel yang semulanya terbentuk saat proses migration akan hilang semua dan hanya meninggalkan tabel migration.

Laravel Migrate Specific Table

Jika pada perintah sebelumnya kita telah mencoba menjalankan seluruh file migration pada folder migration , selanjutnya kita akan mencoba untuk menjalankan specific table pada file migration tertentu. Berikut adalah perintah yang digunakan untuk menjalankannya :

php artisan migrate --path=/database/migrations/2022_03_22_141314_create_mahasiswa_tabel.php

Maka akan didapati hasil seperti berikut ini jika prosesnya berhasil :

migration laravel

Selanjutnya coba cek lagi database kalian melalui phpMyAdmin atau Adminer . Maka hasilnya akan seperti gambar dibawah ini :

cara membuat migration laravel

Membuat Skema Tabel Berelasi Pada Migration

Migration juga mendukung dalam pembuatan tabel yang berelasi. Untuk membuat tabel yang ber relasi kalian harus membuat foreign key di migration laravel kalian. Namun sebelumnya kalian harus menyiapkan design database yang didalamnya terdapat minimal 2 tabel yang dimungkinkan saling ber realsi. Ok, sebagai contoh saya telah membuat sebuah design database sederhana yang terdiri dari 2 tabel yaitu mahasiswa dan prodi berikut adalah designnya.

cara membuat tabel di laravel

Dari design diatas yang perlu kita perhatikan adalah pada relasi antara tabel prodi dan mahasiswa . Kita akan menambahkan sebuah field baru pada tabel mahasiswa yang nantinya akan digunakan sebagai foreign key dari tabel prodi.

Selanjutnya kita akan mencoba mengimplementasikanya pada file migration yang telah kita buat tadi. Silakan, buka kembali file migration mahasiswa pada folder migration pada text editor kalian. Kemudian modifikasi isinya menjadi seperti berikut ini:

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('mahasiswa_tabel', function (Blueprint $table) {
            $table->id();
            $table->string('nim',10);
            $table->string('nama',50);
            $table->text('alamat');
            $table->unsignedBigInteger('prodi_id');
            $table->timestamps();
        });
         //relasi ke tabel prodi
         Schema::table('mahasiswa_tabel', function (Blueprint $table) {
            $table->foreign('prodi_id')->references('id')->on('prodi_tabel')->onUpdate('cascade')->onDelete('cascade');
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('mahasiswa_tabel');
    }
};

Penjelasan :

Diketahui dari scribt diatas kita telah menambahkan sebuah field dengan nama prodi_id dan tipe datanya adalah bigInteger dimana field tersebut merupakan unsigned. Selain itu kita juga telah menambahkan sebuah relasi pada schema table. Maksud dari scribt $table->foreign(‘prodi_id’)->references(‘id’)->on(‘prodi_tabel’)->onUpdate(‘cascade’)->onDelete(‘cascade’) berikut pada scribt diatas adalah kita akan menyetting field prodi_id sebagai foreign key yang berrelasi dengan id pada tabel prodi_tabel . Disitu juga kita tambahkan method onUpdate(‘cascade’) dan onDelete(‘cascade’) maksudnya adalah ketika data pada tabel prodi_tabel nanti di update atau dihapus maka data pada tabel mahasiswa_tabel yang berrelasi dengan data pada tabel prodi_tabel tersebut juga akan ikut keupdate atau kehapus.

Oiya karena kita belum menambahkan file migration untuk tabel prodi_tabel maka terlebih dahulu kita perlu menambahkan file migration prodi_tabel dengan menggunakan perintah berikut pada terminal atau CMD kalian.

php artisan make:migration create_prodi_tabel

Kemudian modifikasi isi file migration prodi yang telah kalian buat menjadi seperti dibawah ini :

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('prodi_tabel', function (Blueprint $table) {
            $table->id();
            $table->string('nama',20);
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('prodi_tabel');
    }
};

Selanjutnya kita perlu menjalankan migration yang telah kita buat agar tabel pada database kita juga ikut terupdate.

Melakukan Refresh dan Meng update Migration Laravel

Jika pada tutorial sebelumnya kita menjalankan file migration dengan menggunakan perintah php artisan migrate namun berbeda kasusnya dengan yang satu ini . Karena kita sebelumnya sudah menjalankan file migration mahasiswa maka di database masih ada tabel mahasiswa yang sebelumnya digenerate. Untuk itu kita akan menggunakan perintah berikut untuk merefresh semua tabel yang telah terbentuk untuk digantikan dengan struktur tabel yang baru dan menambahkan tabel baru jika ada.

php artisan migrate:refresh

Ketika menjalankan perintah diatas sama saja kita telah melakukan rollback setelah itu menjalankan file migration ulang.

Jika ternyata pada saat proses menjalankan perintah php artisan migrate:refresh terdapat error kalian dapat mengikuti tutorial berikut mengatasi foreign key constraint is incorrectly formed semoga dapat membantu memecahkan masalah anda.

Jika tidak terjadi error maka ketika kalian membuka phpMyAdmin atau Adminner kalian maka akan didapati hasil seperti berikut :

cara membuat tabel di laravel

Sekarang kita coba buka dengan mode designer pada phpMyAdmin dengan masuk pada tab lainya -> Desainer , maka hasilnya akan seperti berikut :

cara membuat tabel di laravel

Hasil diatas menunjukkan jika relasi pada tabel kalian sudah berhasil dibuat .

Sekian tutorial dari saya kali ini mengenai cara membuat migration laravel . Untuk tutorial selanjutnya kita akan mempelajari tentang penggunaan model pada laravel (comming soon) .

Incoming Search Terms :

  • cara membuat tabel di laravel
  • Cara membuat Model Laravel
  • laravel migrate specific table
  • membuat foreign key di migration laravel
  • add primary key in migration laravel
  • add column migration laravel

Leave a Comment

Your email address will not be published.