Tutorial Laravel #10: Migration di Laravel
1. Apa itu Migration?
Migration adalah cara Laravel mengelola struktur database menggunakan kode PHP - bukan SQL manual. Anggap migration seperti version control untuk database. Setiap perubahan struktur tabel (tambah kolom, ubah tipe data, buat tabel baru) dicatat dalam file migration yang bisa dijalankan, di-rollback, atau diulang kapan saja.
Keuntungannya: semua anggota tim punya struktur database yang sama cukup dengan jalankan php artisan migrate.
2. Membuat Migration
# Buat migration untuk tabel baru
php artisan make:migration create_artikels_table
# Buat migration untuk modifikasi tabel
php artisan make:migration add_status_to_artikels_table
# Buat migration sekaligus dengan model
php artisan make:model Artikel -m
# Flag -m otomatis buat migration juga
File migration disimpan di database/migrations/ dengan nama berformat YYYY_MM_DD_HHMMSS_nama_migration.php.
3. Struktur File Migration
<?php
// database/migrations/2025_01_01_000000_create_artikels_table.php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
// Dijalankan saat: php artisan migrate
public function up(): void
{
Schema::create('artikels', function (Blueprint $table) {
$table->id(); // kolom id bigint auto increment
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->foreignId('kategori_id')->nullable()->constrained();
$table->string('judul', 200);
$table->string('slug')->unique();
$table->text('deskripsi_singkat')->nullable();
$table->longText('konten');
$table->string('gambar')->nullable();
$table->enum('status', ['draft', 'published'])->default('draft');
$table->integer('views')->default(0);
$table->timestamps(); // kolom created_at & updated_at
$table->softDeletes(); // kolom deleted_at
});
}
// Dijalankan saat: php artisan migrate:rollback
public function down(): void
{
Schema::dropIfExists('artikels');
}
};
4. Tipe Kolom yang Sering Dipakai
$table->id(); // BIGINT UNSIGNED AUTO INCREMENT
$table->string('nama', 100); // VARCHAR(100)
$table->text('deskripsi'); // TEXT
$table->longText('konten'); // LONGTEXT
$table->integer('views'); // INT
$table->bigInteger('total'); // BIGINT
$table->unsignedBigInteger('user_id'); // BIGINT UNSIGNED
$table->float('rating'); // FLOAT
$table->decimal('harga', 12, 2); // DECIMAL(12,2) - untuk uang
$table->boolean('aktif'); // TINYINT(1)
$table->date('tanggal_lahir'); // DATE
$table->dateTime('jadwal'); // DATETIME
$table->timestamps(); // created_at + updated_at DATETIME
$table->softDeletes(); // deleted_at DATETIME NULLABLE
$table->enum('status', ['aktif', 'nonaktif']); // ENUM
$table->json('metadata'); // JSON
$table->foreignId('user_id')->constrained(); // FK ke tabel users
5. Modifier Kolom
$table->string('email')->unique(); // nilai unik
$table->string('gambar')->nullable(); // boleh NULL
$table->integer('urutan')->default(0); // nilai default
$table->string('kode')->index(); // tambah index
$table->after('nama'); // posisi kolom (saat modify)
6. Menjalankan Migration
# Jalankan semua migration yang belum dijalankan
php artisan migrate
# Rollback migration terakhir
php artisan migrate:rollback
# Rollback sebanyak N step
php artisan migrate:rollback --step=3
# Reset semua dan jalankan ulang dari awal
php artisan migrate:fresh
# Reset + jalankan seeder sekaligus
php artisan migrate:fresh --seed
# Lihat status migration
php artisan migrate:status
7. Migration untuk Modifikasi Tabel
// Tambah kolom baru
public function up(): void
{
Schema::table('artikels', function (Blueprint $table) {
$table->string('meta_title')->nullable()->after('judul');
$table->text('meta_description')->nullable()->after('meta_title');
});
}
public function down(): void
{
Schema::table('artikels', function (Blueprint $table) {
$table->dropColumn(['meta_title', 'meta_description']);
});
}
8. Ringkasan
- Migration adalah version control untuk database - perubahan tabel dicatat dalam file PHP
- Buat migration dengan
php artisan make:migration nama_migration - Method
up()untuk membuat,down()untuk rollback - Jalankan dengan
php artisan migrate, rollback denganphp artisan migrate:rollback
Tutorial berikutnya membahas seeder dan factory di Laravel.
.jpg)
