- Apa itu Laravel ?
- Belajar Laravel : Memahami Routing Laravel
- Belajar Laravel : Menginstal Laravel
- Belajar Laravel : Migration di Laravel
- Belajar Laravel : Autentikasi Laravel
- Belajar Laravel : Verifikasi Email
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.
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.
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. Kolombatch
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.
Pingback: Belajar Laravel : Memahami Routing Laravel - Kawan Koding
Pingback: Mengganti Migration Codeigniter 4 - Kawan Koding