#5: Membuat Catatan Ajaib (Migration) – Tabel Categories
Halo, Penyihir Database! 🧙♂️
Sekarang kita sudah punya database situs_berita dan Laravel sudah terhubung. Saatnya membuat tabel pertama kita: categories (kategori berita). Di Laravel, kita tidak membuat tabel langsung di MySQL dengan mengetik SQL. Kita menggunakan migration, yaitu sebuah "catatan ajaib" yang bisa kita jalankan kapan saja untuk membuat atau mengubah struktur tabel. Kerennya, migration ini bisa dibagikan ke teman dan dijalankan di komputernya juga.
- Membuat file migration untuk tabel
categories. - Mengisi migration dengan kolom-kolom yang dibutuhkan (id, name, slug, timestamps).
- Menjalankan migration sehingga tabel benar-benar tercipta di database.
- Memeriksa hasilnya menggunakan HeidiSQL.
Apa Itu Migration?
Bayangkan migration adalah cetakan kue yang berisi resep bentuk kue (struktur tabel). Ketika kita jalankan perintah migrate, Laravel akan "memanggang" cetakan itu menjadi tabel sungguhan di database. Jika suatu saat kita ingin mengubah bentuk tabel (misalnya menambah kolom), kita tidak perlu mengubah tabel langsung, cukup buat migration baru. Dengan migration, semua perubahan struktur data terdokumentasi dan bisa di-rollback (dibalikkan) dengan mudah.
Langkah 1: Membuat File Migration
Buka terminal Laragon (klik kanan ikon Laragon → Terminal). Pastikan kamu berada di folder proyek situs-berita. Jika belum, ketik:
cd situs-berita
Kemudian jalankan perintah ini:
php artisan make:migration create_categories_table
Perintah ini menyuruh Laravel membuat file migration baru dengan nama create_categories_table. Laravel akan otomatis membuat file di folder database/migrations/ dengan nama yang berisi timestamp (waktu) di depannya, seperti 2025_03_26_123456_create_categories_table.php.
create_namatable jika untuk membuat tabel baru, atau add_column_to_namatable jika ingin menambah kolom. Sangat membantu untuk dokumentasi.Langkah 2: Mengisi Migration dengan Struktur Tabel
Sekarang buka file migration yang baru dibuat. Kamu bisa menggunakan editor teks (VS Code, Sublime, atau Notepad). File tersebut akan berisi kode PHP dengan dua method: up() (untuk membuat tabel) dan down() (untuk menghapus tabel).
Ubah isi method up() sehingga menjadi seperti berikut:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('categories', function (Blueprint $table) {
$table->id(); // Kolom id (auto-increment)
$table->string('name'); // Nama kategori (contoh: "Teknologi")
$table->string('slug')->unique(); // Slug untuk URL (contoh: "teknologi")
$table->timestamps(); // created_at dan updated_at
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('categories');
}
};
Simpan file tersebut.
$table->id()→ Membuat kolomiddengan tipe big integer, auto-increment, dan primary key.$table->string('name')→ Kolom untuk nama kategori, tipe VARCHAR (255).$table->string('slug')->unique()→ Kolom slug (URL-friendly), misal "olahraga" untuk kategori Olahraga. Kita tambahkanunique()agar tidak ada slug yang sama.$table->timestamps()→ Membuat dua kolom:created_atdanupdated_atyang otomatis diisi waktu saat data dibuat atau diubah.
Langkah 3: Menjalankan Migration (Memanggang Cetakan)
Setelah migration siap, kita jalankan perintah berikut di terminal (pastikan masih di folder proyek):
php artisan migrate
Kamu akan melihat output seperti ini:
Migration table created successfully.
Migrating: 2025_03_26_123456_create_categories_table
Migrated: 2025_03_26_123456_create_categories_table
Artinya migration berhasil dijalankan dan tabel categories sudah terbuat di database.
php artisan migrate, Laravel juga akan membuat tabel migrations untuk mencatat migration mana saja yang sudah dijalankan. Ini berguna agar migration tidak dijalankan ulang.Langkah 4: Memeriksa Tabel dengan HeidiSQL
Mari kita lihat apakah tabel categories sudah benar-benar ada di database:
- Klik kanan ikon Laragon → Database → HeidiSQL.
- Klik Open (dengan user root).
- Di panel kiri, pilih database
situs_berita. - Perluas dan lihat bagian "Tables". Harusnya ada tabel
categoriesdan juga tabelmigrations(yang dibuat otomatis oleh Laravel). - Klik tabel
categorieslalu lihat "Columns" untuk melihat kolom-kolom yang sudah kita definisikan: id, name, slug, created_at, updated_at.
Selamat! Tabel kategori sudah siap digunakan. 🎉
Langkah Bonus: Mencoba Mengisi Data Kategori Pertama (Manual via HeidiSQL)
Kita belum punya form input untuk kategori, tapi kita bisa coba memasukkan data manual dulu untuk memastikan tabel bekerja. Caranya:
- Di HeidiSQL, pilih tabel
categories. - Klik tab "Data".
- Klik "Insert" (atau ikon tambah).
- Isi kolom
namedengan "Teknologi",slugdengan "teknologi". Kolom timestamps akan diisi otomatis nanti jika kita tidak isi, tapi Laravel biasanya mengisi otomatis saat kita pakai model. Untuk tes, kamu bisa isicreated_atdenganNOW(). - Klik "Save".
- Coba tambah satu lagi: "Olahraga" dengan slug "olahraga".
Nanti di tutorial berikutnya, kita akan membuat form untuk mengelola kategori langsung dari website (CRUD).
⚠️ Apa yang Harus Dilakukan Jika Salah?
Jika kamu salah menulis kolom di migration dan ingin memperbaikinya, jangan panik. Ada dua cara:
- Rollback dan Migrate Ulang: Jalankan
php artisan migrate:rollbackuntuk membatalkan migration terakhir, lalu edit file migration, lalu jalankanphp artisan migratelagi. - Buat Migration Baru: Gunakan
php artisan make:migration add_column_to_categories_tableuntuk menambah kolom tanpa merusak data yang sudah ada.
Kita akan bahas lebih lanjut di tutorial mendatang jika diperlukan.
✅ Ringkasan Hari Ini
- ✅ Kita belajar bahwa migration adalah "cetakan" untuk membuat tabel database.
- ✅ Kita membuat migration
create_categories_tabledengan kolom id, name, slug, dan timestamps. - ✅ Kita menjalankan
php artisan migratedan tabelcategoriestercipta. - ✅ Kita lihat hasilnya di HeidiSQL.
Langkah selanjutnya: kita akan membuat model untuk kategori dan mulai membuat halaman CRUD (Create, Read, Update, Delete) untuk mengelola kategori dari website. Menyenangkan, kan?
📝 Seri Tutorial Laravel 13 Pemula – Proyek Web Berita
✨ Selanjutnya: #6: Membuat Jalan Tol (Routing) – Menghubungkan URL dengan Halaman