← Kembali ke tutorial
Laravel Pemula

Migration Dasar — Membuat Tabel Posts dan Categories

29 October 2026 3 kali dibaca

Bagikan: Link disalin!
Migration Dasar — Membuat Tabel Posts dan Categories

Halo bos! Selamat datang di Artikel 6 Belajar Laravel 13.

Ini adalah bagian yang sangat penting. Mulai dari sini, project blog-sederhana kita akan punya struktur database sungguhan.

Kita akan membuat dua tabel utama:

  1. categories → untuk kategori post (Contoh: Teknologi, Lifestyle, Tutorial)
  2. posts → untuk menyimpan artikel blog

Tabel posts akan berelasi ke categories (satu kategori bisa punya banyak post).

Apa Itu Migration?

Migration adalah cara Laravel mengelola struktur database.

Bayangkan seperti version control (mirip Git), tapi khusus untuk database.

Keuntungan memakai Migration:

  1. Struktur database tercatat di kode
  2. Mudah dijalankan di komputer lain / server
  3. Bisa di-rollback kalau ada kesalahan
  4. Tim development tetap sinkron

Semua file migration ada di folder:

database/migrations/

Langkah 1: Buat Migration Tabel Categories

Jalankan perintah ini di terminal:

php artisan make:migration create_categories_table

Laravel akan membuat file baru di database/migrations/ dengan nama mirip:

2026_xx_xx_xxxxxx_create_categories_table.php

Buka file tersebut, lalu ganti isinya menjadi:

<?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();
$table->string('name');
$table->string('slug')->unique();
$table->text('description')->nullable();
$table->timestamps();
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('categories');
}
};

Penjelasan kolom:

Langkah 2: Buat Migration Tabel Posts

Jalankan perintah:

php artisan make:migration create_posts_table

Buka file yang baru dibuat, lalu ganti isinya menjadi:

<?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('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('category_id')->constrained()->cascadeOnDelete();
$table->string('title');
$table->string('slug')->unique();
$table->text('excerpt')->nullable();
$table->longText('body');
$table->string('thumbnail')->nullable();
$table->timestamp('published_at')->nullable();
$table->timestamps();
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('posts');
}
};

Penjelasan penting:

  1. foreignId('category_id')->constrained()->cascadeOnDelete()
  2. Membuat kolom category_id
  3. Menghubungkan ke tabel categories
  4. Kalau kategori dihapus, semua post di dalamnya ikut terhapus (cascadeOnDelete)
  5. slug dibuat unique supaya URL tidak bentrok
  6. excerpt → ringkasan singkat (boleh kosong)
  7. body → isi lengkap artikel
  8. thumbnail → nama file gambar (nanti kita pakai di artikel upload)
  9. published_at → kapan post dipublish (boleh null = masih draft)

Langkah 3: Jalankan Migration

Pastikan database sudah terhubung (dari Artikel 2), lalu jalankan:

php artisan migrate

Kalau berhasil, kamu akan melihat output seperti:

INFO Running migrations.

2026_xx_xx_xxxxxx_create_categories_table ..... DONE
2026_xx_xx_xxxxxx_create_posts_table .......... DONE

Langkah 4: Cek Hasilnya

Ada beberapa cara untuk memastikan tabel sudah dibuat:

Cara 1: Pakai perintah Artisan

php artisan db:show

atau lihat detail tabel:

php artisan db:table categories
php artisan db:table posts

Cara 2: Pakai Tinker

php artisan tinker

Lalu ketik:

Schema::hasTable('categories');
Schema::hasTable('posts');

Kalau hasilnya true, berarti berhasil.

Ketik exit untuk keluar dari Tinker.

Langkah 5: Memahami Urutan Migration

Laravel menjalankan migration berdasarkan timestamp di nama file.

Karena kita membuat categories dulu baru posts, urutannya sudah benar.

Kalau suatu saat kamu membuat migration yang saling bergantung, pastikan tabel yang dirujuk (parent) dibuat lebih dulu.

Langkah 6: Rollback (Kalau Ada Kesalahan)

Kalau kamu ingin mengembalikan migration terakhir:

php artisan migrate:rollback

Kalau ingin mengembalikan semua:

php artisan migrate:reset

Lalu jalankan lagi:

php artisan migrate
Peringatan: Rollback akan menghapus data di tabel tersebut. Hati-hati kalau sudah ada data penting.

Ringkasan yang Sudah Kita Capai

Setelah mengikuti artikel ini, project kamu sekarang punya:

  1. Tabel categories
  2. Tabel posts
  3. Relasi foreign key antara posts dan categories
  4. Struktur database yang sudah rapi dan siap dikembangkan

Tutorial terkait