Seri Belajar Laravel: ← Part 2 — Controller  |  Part 3 — Database & Migration  |  Part 4 — Eloquent ORM →

Selama ini data catatan kita hardcode di controller — setiap kali server di-restart, data "hilang". Ini jelas tidak berguna untuk aplikasi nyata. Saatnya menyimpan data ke database.

Di part ini kita akan setup database SQLite (paling mudah untuk development), membuat tabel menggunakan Migration, dan memahami cara Laravel mengelola struktur database.

Apa itu Migration?

Migration adalah file PHP yang mendefinisikan struktur tabel database — kolom apa saja, tipe datanya, relasinya. Bayangkan migration seperti version control untuk database: setiap perubahan struktur tabel didokumentasikan sebagai file, bisa di-rollback, dan bisa dijalankan ulang di server manapun.

Tanpa migration: kirim SQL mentah ke teman → "eh tabel kamu beda sama punya aku" → pusing. Dengan migration: jalankan php artisan migrate → semua tabel langsung terbuat persis sama.

📋 Progress Belajarmu

① Setup Database SQLite

SQLite adalah database berbasis file — tidak perlu install MySQL/PostgreSQL, tidak perlu running server database terpisah. Sempurna untuk belajar dan development.

Buka file .env di root folder project. Cari bagian DB_ dan ubah menjadi:

DB_CONNECTION=sqlite
# Hapus atau comment baris DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD

Lalu buat file database SQLite-nya:

# Di terminal VS Code, dari folder project:
touch database/database.sqlite

# Windows (kalau touch tidak ada):
New-Item database/database.sqlite
Pakai MySQL? Kalau mau pakai MySQL, set DB_CONNECTION=mysql, DB_HOST=127.0.0.1, DB_PORT=3306, DB_DATABASE=nama_db, DB_USERNAME=root, DB_PASSWORD= — lalu buat database di phpMyAdmin atau Workbench.

② Jalankan Migration Bawaan

Laravel sudah menyertakan beberapa migration default (users, sessions, dll). Jalankan semuanya:

php artisan migrate

Output yang muncul:

   INFO  Running migrations.

  2014_10_12_000000_create_users_table ................. 10ms DONE
  2014_10_12_100000_create_password_reset_tokens_table . 5ms  DONE
  2024_01_01_000000_create_cache_table ................. 3ms  DONE
  2024_01_01_000001_create_jobs_table .................. 3ms  DONE

Tabel-tabel tersebut sudah terbuat di database. Kamu bisa cek isinya dengan extension SQLite Viewer di VS Code (cari di Extensions panel).

③ Buat Migration Tabel Catatan

php artisan make:migration create_catatan_table

File baru terbuat di database/migrations/ dengan nama seperti 2026_04_23_000000_create_catatan_table.php. Buka file tersebut:

<?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('catatan', function (Blueprint $table) {
            $table->id();
            $table->string('judul');
            $table->text('isi');
            $table->timestamps();
        });
    }

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

④ Memahami Schema Builder

Kolom-kolom yang tersedia:

MethodTipe Data SQLKegunaan
$table->id()BIGINT UNSIGNED AUTO_INCREMENTPrimary key (wajib ada)
$table->string('nama')VARCHAR(255)Teks pendek (nama, judul, email)
$table->text('konten')TEXTTeks panjang (artikel, deskripsi)
$table->integer('umur')INTEGERAngka bulat
$table->boolean('aktif')TINYINT(1)true/false
$table->timestamp('tgl_lahir')TIMESTAMPTanggal & waktu
$table->timestamps()created_at + updated_atOtomatis diisi Laravel
->nullable()NULL diizinkanKolom boleh kosong
->default('nilai')DEFAULTNilai default kolom

Update migration untuk menambah kolom user_id (untuk nanti saat ada fitur login):

Schema::create('catatan', function (Blueprint $table) {
    $table->id();
    $table->string('judul');
    $table->text('isi');
    $table->boolean('penting')->default(false);  // tandai catatan penting
    $table->timestamps();
});

⑤ Jalankan Migration

php artisan migrate

Tabel catatan terbuat. Kalau ada kesalahan dan mau mulai ulang:

# Rollback migration terakhir
php artisan migrate:rollback

# Rollback SEMUA dan jalankan ulang (hati-hati: data terhapus!)
php artisan migrate:fresh

Tambah Data Dummy dengan Tinker

Laravel punya tool interaktif bernama Tinker untuk bereksperimen langsung dengan database:

php artisan tinker
# Di dalam Tinker:
DB::table('catatan')->insert([
    'judul'      => 'Catatan pertama dari database!',
    'isi'        => 'Ini disimpan beneran di SQLite.',
    'penting'    => true,
    'created_at' => now(),
    'updated_at' => now(),
]);

# Cek isinya:
DB::table('catatan')->get();

# Keluar dari Tinker:
exit

Langkah Selanjutnya

Database sudah siap, tabel sudah ada, data dummy sudah masuk. Di Part 4 — Eloquent ORM, kita akan membuat Model dan belajar cara mengambil, menyimpan, mengupdate, dan menghapus data dengan cara yang jauh lebih elegan dari raw SQL.