laravelmigrationdatabasePemula3 mnt baca

Migration: Version Control untuk Database

Kelola skema database dengan migration: buat tabel, ubah kolom, dan rollback dengan aman.

Migration itu apa?

Migration adalah file PHP yang mendeskripsikan perubahan skema database. Seperti Git untuk database: setiap perubahan tercatat, bisa dijalankan maju (migrate) atau mundur (rollback), dan seluruh tim mendapat skema yang sama.

Buat migration baru:

bash
php artisan make:migration create_posts_table

File dibuat di database/migrations/ dengan prefix timestamp supaya urutannya jelas.

php
// database/migrations/xxxx_create_posts_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained()->cascadeOnDelete();
            $table->string('judul');
            $table->string('slug')->unique();
            $table->text('isi');
            $table->enum('status', ['draft', 'published'])->default('draft');
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

Tipe kolom yang sering dipakai: string (varchar 255), text, integer, boolean, date, datetime, decimal, json. Method timestamps() membuat kolom created_at dan updated_at otomatis. Method foreignId()->constrained() membuat foreign key ke tabel users mengikuti konvensi.

Mengubah tabel yang sudah ada

bash
php artisan make:migration add_cover_to_posts_table --table=posts
php
public function up(): void
{
    Schema::table('posts', function (Blueprint $table) {
        $table->string('cover')->nullable()->after('slug');
    });
}

public function down(): void
{
    Schema::table('posts', function (Blueprint $table) {
        $table->dropColumn('cover');
    });
}

Perintah yang wajib hafal

bash
php artisan migrate            # jalankan migration yang belum jalan
php artisan migrate:rollback   # batalkan batch terakhir
php artisan migrate:refresh    # rollback semua lalu migrate ulang
php artisan migrate:fresh       # drop semua tabel lalu migrate ulang

Catatan teknis: Jangan pernah mengedit migration yang sudah di-push dan dijalankan di server production. Buat migration baru untuk setiap perubahan. Mengedit migration lama bikin database tiap environment tidak sinkron dan migrasi bisa gagal total.