Migration Database di Laravel — Fondasi Struktur Database yang Rapi
Dalam pengembangan aplikasi, struktur database adalah pondasi penting yang harus dijaga dengan rapi, terdokumentasi, dan konsisten di setiap lingkungan (local, staging, production). Laravel menyediakan fitur Migration untuk menjembatani hal tersebut.
Melalui migration, developer tidak perlu lagi membuat tabel secara manual via phpMyAdmin atau CLI SQL. Semua perubahan struktur database (create, alter, drop) dicatat dalam file versi yang bisa dieksekusi, di-rollback, dan dibagikan ke tim.
🎯 Apa Itu Migration?
Migration adalah version control untuk struktur database.
Artinya:
- Pembuatan tabel bisa dicatat.
- Perubahan kolom bisa dicatat.
- Pengecilan atau penghapusan tabel juga dicatat.
- Bisa otomatis diterapkan ke semua environment.
Bayangkan migration seperti git commit, tapi untuk database.
⚙️ Cara Membuat Migration
Laravel menyediakan artisan command untuk membuat migration.
Contoh membuat migration tabel products:
php artisan make:migration create_products_table
Perintah ini akan membuat file .php di folder:
database/migrations/
Nama file biasanya seperti:
2026_01_14_123456_create_products_table.php
📝 Struktur File Migration
File migration memiliki dua metode utama:
public function up()
{
// Perubahan struktur saat migrate
}
public function down()
{
// Rollback perubahan
}
Contoh isi create_products_table.php:
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name', 120);
$table->integer('stock')->default(0);
$table->decimal('price', 10, 2);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('products');
}
🚀 Menjalankan Migration
Jalankan semua migration dengan command:
php artisan migrate
Jika berhasil, Laravel akan:
✔ Membuat tabel baru
✔ Menyimpan catatan di migrations table
✔ Tidak menjalankan ulang migration yang sudah tercatat
⏪ Rollback Migration
Kadang kita butuh undo (kembali ke struktur sebelumnya):
1) Rollback step terakhir:
php artisan migrate:rollback
2) Reset semua:
php artisan migrate:reset
3) Fresh (drop semua tabel + migrate lagi):
php artisan migrate:fresh
Umum dipakai saat development.
🔧 Menambah Kolom Baru di Tabel Existing
Misal ingin menambah kolom weight ke tabel products:
php artisan make:migration add_weight_to_products_table
Isi migrasi:
public function up()
{
Schema::table('products', function (Blueprint $table) {
$table->integer('weight')->nullable();
});
}
public function down()
{
Schema::table('products', function (Blueprint $table) {
$table->dropColumn('weight');
});
}
🧼 Mengubah & Menghapus Kolom
➤ Mengubah kolom (butuh Doctrine DBAL):
Install dulu:
composer require doctrine/dbal
Contoh ubah tipe price jadi nullable:
$table->decimal('price', 10, 2)->nullable()->change();
➤ Menghapus kolom:
$table->dropColumn('stock');
✨ Fitur Ekstra yang Sering Dipakai
Laravel menyediakan fitur siap pakai seperti:
KolomKeteranganid()Kolom primary auto incrementtimestamps()Kolom created_at & updated_atsoftDeletes()Kolom deleted_at untuk soft deletenullable()Kolom boleh kosongdefault()Nilai default
Contoh lengkap:
$table->string('status')->default('pending');
$table->softDeletes();
👥 Migration untuk Relasi
Eloquent mendukung foreign key:
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
Di atas artinya:
user_idmengacu ke tabelusers- Hapus user → hapus data terkait
🗃 Kenapa Harus Pakai Migration?
Beberapa manfaat utama:
✔ Terasa seperti version control database
✔ Tidak perlu klik-klik di phpMyAdmin
✔ Memudahkan deploy ke server
✔ Menjaga konsistensi tim
✔ Membuat rollback cepat
✔ Terintegrasi dengan Seeder & Factory
📌 Kesimpulan
Migration database adalah fitur penting di Laravel untuk:
- Mengatur struktur database
- Mengelola perubahan kolom
- Membuat versioning schema
- Menjamin konsistensi antar environment
Jika kamu membangun aplikasi skala kecil hingga besar, migration adalah best practice yang wajib diterapkan.
Next Baca Juga: Seeder Factory Laravel