Logo Catatan Kader Logo Catatan Kader
  • Beranda
Beranda
Backend Engineering / Laravel

Deep Dive: Migration & Eloquent Model

Laravel Migration Banner

Modul 02

"Merancang Skema Database dengan Elegan"

Maret 29, 2026
30 Menit Eksekusi

Seringkali pemula bingung membedakan antara Migration dan Model karena keduanya berurusan dengan database. Sederhananya: Migration yang membuat mejanya, Model yang menaruh dan mengambil barang di atas meja tersebut.

# Komparasi: Migration vs Model

Aspek Database Migration Eloquent Model
Fungsi Utama Mendefinisikan struktur tabel (kolom, tipe data, relasi, index). Berfungsi sebagai *version control* DB. Mewakili data di dalam tabel. Digunakan untuk proses CRUD (Create, Read, Update, Delete) berbasis OOP.
Lokasi Folder database/migrations/ app/Models/
Analogi Blueprint / cetak biru arsitektur rumah. Remote control untuk mengatur isi rumah.
Command Buat php artisan make:migration php artisan make:model
Live Execution

LAB: Mendesain Skema Database

01 Generate Skema Serentak

Gunakan flag -m (*migration*) saat membuat model agar file model dan file migration dibuat bersamaan. Ini adalah best practice yang menghemat waktu.

php artisan make:model Article -m

02 Konfigurasi Tipe Data & Modifiers (Migration)

Buka file migration yang baru terbuat di database/migrations. Di sini kita menentukan struktur tabel secara spesifik beserta modifiers-nya (seperti nullable, unique, atau default).

public function up(): void
{
    Schema::create('articles', function (Blueprint $table) {
        $table->id(); // Primary key (BigInt Auto Increment)
        $table->string('title')->unique(); // String (Varchar 255), tidak boleh kembar
        $table->string('slug'); // Untuk URL ramah SEO
        $table->text('content'); // Text panjang tanpa limit varchar
        $table->string('image')->nullable(); // Boleh kosong (NULL)
        $table->enum('status', ['draft', 'published'])->default('draft'); // Pilihan pasti
        $table->foreignId('user_id')->constrained()->cascadeOnDelete(); // Relasi ke tabel users
        $table->timestamps(); // otomatis membuat create_at & updated_at
    });
}

03 Eksekusi & Rollback Database

Untuk mendorong perubahan struktur ini ke dalam MySQL Anda, jalankan migrate. Jika Anda melakukan kesalahan (misal lupa menambahkan kolom), Anda bisa melakukan rollback atau mereset total dengan perintah fresh.

# Eksekusi migrasi yang belum dijalankan
php artisan migrate

# Mengembalikan 1 step migrasi terakhir (Membongkar tabel)
php artisan migrate:rollback

# HAPUS SEMUA TABEL, lalu jalankan ulang migrasi dari awal
# (Hati-hati, data akan hilang! Hanya untuk masa development)
php artisan migrate:fresh

04 Mass Assignment di Model ($fillable vs $guarded)

Buka app/Models/Article.php. Secara default, Laravel memblokir Mass Assignment demi keamanan (mencegah *hacker* menyuntikkan data ke kolom sembarangan seperti is_admin). Kita harus mendefinisikannya secara eksplisit.

Opsi 1: Menggunakan $fillable (Whitelist)

Hanya kolom di dalam array ini yang boleh diisi.

class Article extends Model
{
    // Hanya kolom ini yang aman
    protected $fillable = [
        'title', 
        'slug', 
        'content', 
        'image',
        'status',
        'user_id'
    ];
}

Opsi 2: Menggunakan $guarded (Blacklist)

Semua kolom boleh diisi KECUALI yang di array ini.

class Article extends Model
{
    // Cegah 'id' agar tidak di-hack,
    // sisanya boleh diisi.
    protected $guarded = [
        'id'
    ];
}
Kader Note (Penamaan):

Laravel memiliki konvensi penamaan yang kuat agar sistem otomatis berjalan:

  • Model: Singular, PascalCase (Contoh: Article)
  • Tabel Database: Plural, snake_case (Contoh: articles)

Jika Anda memiliki tabel database lama yang penamaannya tidak sesuai konvensi (misal tabelnya bernama tb_artikel_data), Anda bisa menimpanya di dalam Model dengan menambahkan: protected $table = 'tb_artikel_data';

Modul 1: Instalasi Modul 3: Controller

Catatan Kader

"Menulis migration di awal mungkin terasa lambat dibanding mengubah DB manual. Namun saat project Anda berpindah server, atau dikerjakan tim, Anda akan bersyukur telah melakukannya."
- Abdul Kader

Lanjut ke Materi

M3

Routing & Controller

HTTP Request
Catatan Kader Catatan Kader

Catatan ini dikelola untuk keperluan dokumentasi pribadi, pengembangan kemampuan analisis logika, serta standarisasi implementasi sistem teknologi.

© 2026 Catatan Kader. Deployment Active.