Pernah kerja bareng tim, dan tiba-tiba database di laptopmu beda struktur sama punya teman satu tim? Atau pernah takut salah ubah tabel di server production sampai data hilang? Nah, itulah masalah nyata yang dialami developer sebelum mengenal Migration. Di seri 50 Artikel Belajar Laravel ini — tepatnya artikel ke-11 — kita akan bahas tuntas fitur Migration di Laravel yang bakal bikin pengelolaan database-mu jauh lebih terstruktur, aman, dan bisa di-version control. Sama seperti kamu sudah belajar routing Laravel di artikel-artikel sebelumnya, Migration ini adalah fondasi yang wajib kamu kuasai sebelum membangun aplikasi serius.
Migration di Laravel adalah sistem version control untuk database. Ia memungkinkan kamu mendefinisikan struktur tabel (nama kolom, tipe data, index) menggunakan kode PHP — bukan SQL mentah. Setiap perubahan skema database dicatat sebagai file migration yang bisa dijalankan, di-rollback, atau dibagikan ke anggota tim dengan mudah.
🗂️ Apa Itu Migration dan Mengapa Kamu Butuh Ini?
Bayangkan proyek aplikasimu adalah sebuah bangunan gedung bertingkat. Setiap lantai baru yang kamu tambahkan adalah perubahan database — kolom baru, tabel baru, atau modifikasi struktur. Tanpa Migration, kamu hanya bisa "ingat-ingat sendiri" perubahan apa yang sudah dilakukan. Kalau ada anggota tim baru bergabung, mereka harus menebak sendiri struktur database yang benar.
Dengan Migration, setiap perubahan terdokumentasi rapi dalam file PHP yang bisa dieksekusi kapan saja. Jalankan satu perintah Artisan, dan database siapa pun di tim akan langsung sinkron. Bayangkan betapa nyamannya!
Fakta Menarik
Laravel sudah menyertakan beberapa file migration bawaan saat project pertama kali dibuat — termasuk migration untuk tabel users, password_reset_tokens, dan failed_jobs. Kamu tidak perlu buat dari nol untuk fitur autentikasi dasar!
❌ Tanpa Migration
- Ubah database manual via phpMyAdmin
- Tim sering tidak sinkron strukturnya
- Tidak bisa rollback kalau salah
- Tidak ada catatan riwayat perubahan
- Deploy ke server = pusing sendiri
✅ Dengan Migration
- Definisikan tabel lewat kode PHP
- Satu perintah, semua sinkron
- Rollback semudah satu perintah
- Riwayat lengkap tersimpan di Git
- Deploy lancar tanpa drama
⚡ Cara Membuat Migration di Laravel: Langkah demi Langkah
Seperti halnya saat kamu mendefinisikan routing Laravel di file routes/web.php, Migration juga punya file tersendiri yang disimpan di folder database/migrations/. Mari kita buat migration pertama kita dari awal.
Konfigurasi koneksi database dulu
Sebelum menjalankan migration, pastikan file .env sudah dikonfigurasi dengan benar untuk koneksi database:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database_kamu
DB_USERNAME=root
DB_PASSWORD=password_kamu
Buat file migration baru dengan Artisan
Gunakan perintah make:migration di terminal. Laravel otomatis memberi nama file dengan timestamp agar urutan eksekusi terjaga.
php artisan make:migration create_products_table
# Buat migration + update tabel yang sudah ada
php artisan make:migration add_stock_to_products_table --table=products
Edit file migration yang terbentuk
Buka file yang baru dibuat di folder database/migrations/. Kamu akan melihat dua method utama: up() untuk membuat/mengubah, dan down() untuk rollback.
Jalankan migration ke database
Satu perintah ini akan membaca semua file migration yang belum dieksekusi dan menjalankannya secara berurutan:
php artisan migrate
# Output yang akan kamu lihat:
INFO Running migrations.
✓ database/migrations/..._create_products_table.php 14ms DONE
Tips Penamaan Migration
Gunakan konvensi nama yang deskriptif dan konsisten: create_[nama_tabel]_table untuk membuat tabel baru, dan add_[kolom]_to_[tabel]_table untuk menambah kolom. Laravel juga bisa mendeteksi intent dari nama ini dan otomatis mengisi kode stub yang sesuai!
🔧 Tipe Kolom, Modifier, dan Cara Rollback Migration
Blueprint di Laravel menyediakan puluhan metode untuk mendefinisikan berbagai tipe kolom database. Memahami pilihan ini sangat penting agar kamu bisa merancang skema database yang efisien dan tepat. Berikut referensi tipe kolom yang paling sering dipakai:
| Method Blueprint | Tipe SQL | Kegunaan Umum |
|---|---|---|
id() |
BIGINT UNSIGNED AUTO_INCREMENT | Primary key standar |
string('col', 100) |
VARCHAR(100) | Nama, email, judul |
text('col') |
TEXT | Deskripsi, konten artikel |
integer('col') |
INT | Stok, jumlah, umur |
decimal('col', 10, 2) |
DECIMAL(10,2) | Harga, nilai desimal |
boolean('col') |
TINYINT(1) | Status aktif, is_published |
timestamp('col') |
TIMESTAMP | Tanggal/waktu spesifik |
foreignId('user_id') |
BIGINT UNSIGNED | Foreign key ke tabel lain |
timestamps() |
created_at + updated_at | Timestamp otomatis (wajib pakai!) |
Perintah-Perintah Penting Migration
Perhatian: Jangan migrate:fresh di Production!
Perintah migrate:fresh akan menghapus semua tabel dan membuat ulang dari awal. Di environment development ini oke, tapi di server production itu bencana — data pengguna hilang semua! Selalu cek environment sebelum menjalankan perintah ini.
🚀 Tips Lanjutan Migration yang Wajib Kamu Tahu
Setelah kamu mahir dengan dasar-dasar migration, ada beberapa pola dan teknik yang akan meningkatkan kualitas kode database-mu ke level berikutnya. Ini juga relevan banget saat kamu mulai membangun relasi antar tabel di Laravel — yang sering berjalan beriringan dengan konfigurasi routing Laravel untuk fitur-fitur CRUD.
Mendefinisikan Foreign Key dengan Cara yang Elegan
Laravel 8+ menyediakan cara ringkas untuk mendefinisikan foreign key yang sekaligus menambahkan constraint relasional:
->constrained() // auto-reference ke tabel users
->onDelete('cascade'); // hapus post jika user dihapus
Modifikasi Kolom yang Sudah Ada
Perlu mengubah tipe kolom atau menambah kolom baru di tabel yang sudah ada? Buat migration baru, jangan edit yang lama!
public function up(): void
{
Schema::table('products', function (Blueprint $table) {
$table->string('category')->nullable()->after('name');
});
}
public function down(): void
{
Schema::table('products', function (Blueprint $table) {
$table->dropColumn('category');
});
}
Insight Penting: Jangan Edit Migration Lama!
Prinsip emas Migration: migration yang sudah dijalankan tidak boleh diedit. Kalau kamu perlu perubahan, selalu buat file migration baru. Mengapa? Karena anggota tim lain (atau server production) sudah menjalankan migration lama tersebut. Mengeditnya akan membuat status migration tidak konsisten dan bisa menyebabkan error yang susah dilacak.
📖 Navigasi Seri 50 Artikel Belajar Laravel
No comments:
Post a Comment