Belajar Livewire 4 #7 – Model dan Migration

Tutorial lengkap Livewire 4 dan Laravel 12 yang membahas konsep, fitur terbaru, dan praktik terbaik membangun aplikasi web modern tanpa ribet JavaScript. Materi disusun bertahap dari dasar hingga studi kasus nyata dengan penjelasan mengalir dan mudah dipahami.

✅ Telah dilihat 150 kali

Rating: 5.00 ⭐

... 04 February 2026, 06:28

Model & Migration

Setelah kita berhasil melakukan konfigurasi database dan memastikan koneksi MySQL berjalan dengan baik, sekarang kita masuk ke bagian yang sangat penting dalam Laravel, yaitu Model dan Migration.

Dua hal ini hampir selalu dipakai bersama. Kalau diibaratkan, migration itu seperti denah bangunan, sedangkan model adalah cara kita berinteraksi dengan bangunan tersebut lewat kode.

Mari kita pahami satu per satu.


Apa Itu Migration?

Migration adalah fitur Laravel yang digunakan untuk mengatur struktur database menggunakan kode. Dengan migration, kita tidak perlu lagi membuat tabel secara manual lewat phpMyAdmin.

Beberapa keuntungan menggunakan migration:

  • Struktur database tercatat dalam kode
  • Mudah di-rollback atau diubah
  • Konsisten di semua environment (local, staging, production)
  • Sangat cocok untuk kerja tim

Singkatnya, migration berfungsi untuk:

  • Membuat tabel
  • Menambah kolom
  • Mengubah struktur tabel
  • Menghapus tabel

Semuanya dilakukan lewat file PHP, bukan lewat klik-klik di database.


Apa Itu Model?

Model adalah representasi dari tabel database di dalam kode Laravel. Model ini digunakan untuk:

  • Mengambil data dari database
  • Menyimpan data ke database
  • Mengupdate dan menghapus data
  • Mengatur relasi antar tabel

Laravel menggunakan Eloquent ORM, sehingga kita bisa berinteraksi dengan database menggunakan sintaks PHP yang rapi dan mudah dibaca, tanpa harus menulis query SQL secara langsung.

Biasanya:

  • Satu model mewakili satu tabel
  • Nama model menggunakan bentuk tunggal
  • Nama tabel menggunakan bentuk jamak

Contoh:

  • Model: Post
  • Tabel: posts

Hubungan Model dan Migration

Dalam praktiknya:

  • Migration bertugas membuat dan mengatur struktur tabel
  • Model bertugas mengelola data di dalam tabel tersebut

Keduanya saling melengkapi dan hampir selalu digunakan bersamaan dalam setiap fitur Laravel.


Membuat Model Post

Pada studi kasus ini, kita akan membuat sebuah fitur sederhana untuk menyimpan data post. Data yang akan kita kelola meliputi:

  • title (judul)
  • content (isi)
  • image (gambar)

Untuk itu, kita perlu membuat model sekaligus migration agar Laravel tahu:

  • bagaimana struktur tabelnya
  • dan bagaimana cara berinteraksi dengan data tersebut

Membuat Model dan Migration

Silakan jalankan perintah berikut di terminal. Pastikan posisi terminal masih berada di dalam direktori project Laravel.

php artisan make:model Post -m

Penjelasan Perintah

Mari kita pahami maksud dari perintah di atas:

  • php artisan Digunakan untuk menjalankan perintah bawaan Laravel
  • make:model Post Perintah untuk membuat model bernama Post
  • -m Flag ini memberi tahu Laravel untuk langsung membuat file migration bersamaan dengan model

Dengan satu perintah ini, Laravel akan otomatis membuat dua file sekaligus:

  1. Model

    app/Models/Post.php
    
  2. Migration

    database/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php
    

Kenapa Menggunakan Flag -m?

Flag -m sangat membantu karena:

  • Menghemat waktu
  • Model dan migration langsung sinkron
  • Mengurangi risiko lupa membuat migration

Ini adalah praktik yang sangat umum dan direkomendasikan dalam pengembangan Laravel.

Konfigurasi Model

Silakan buka file app/Models/Post.php. Kemudian ubah menjadi seperti berikut ini:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    /**
     * Kolom yang boleh diisi mass assignment
     */
    protected $fillable = [
        'title',
        'content',
        'image',
    ];

    /**
     * Opsional: casting field
     */
    protected $casts = [
        'created_at' => 'datetime',
        'updated_at' => 'datetime',
    ];
}

Mari kita bahas kode diatas baris demi baris.


1. Namespace dan Import Class

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

Bagian ini adalah standar bawaan Laravel:

  • namespace App\Models; Menunjukkan bahwa file ini berada di folder app/Models
  • Model Kelas dasar Eloquent yang membuat model ini bisa berinteraksi dengan database
  • HasFactory Digunakan untuk keperluan factory (biasanya untuk testing atau seeding data)

2. Deklarasi Class Model

class Post extends Model
{
    use HasFactory;

Di sini kita mendefinisikan model Post sebagai turunan dari Model. Artinya, model ini otomatis memiliki semua kemampuan Eloquent seperti:

  • create
  • update
  • delete
  • find
  • dan lain-lain

3. $fillable – Mass Assignment

protected $fillable = [
    'title',
    'content',
    'image',
];

Bagian ini sangat penting.

$fillable berfungsi untuk menentukan kolom apa saja yang boleh diisi secara mass assignment, misalnya saat menggunakan:

Post::create($data);

Dengan konfigurasi ini:

  • Laravel hanya mengizinkan kolom titlecontent, dan image
  • Kolom lain akan diabaikan demi keamanan

Ini adalah mekanisme perlindungan Laravel agar data sensitif tidak bisa diisi sembarangan.


4. $casts – Casting Data (Opsional)

protected $casts = [
    'created_at' => 'datetime',
    'updated_at' => 'datetime',
];

Bagian ini bersifat opsional, tapi bagus untuk kerapian data.

$casts digunakan untuk:

  • Mengubah tipe data secara otomatis
  • Memastikan created_at dan updated_at diperlakukan sebagai objek DateTime

Dengan begitu:

  • Kita bisa langsung memformat tanggal

  • Menggunakan helper waktu Laravel tanpa konversi manual.


Membuka File Migration

Silakan buka file migration yang tadi di-generate bersamaan dengan model Post. File tersebut berada di direktori:

database/migrations/2026_01_25_053647_create_posts_table.php

Nama file bisa sedikit berbeda di setiap komputer, karena bagian tanggal dan jam dibuat secara otomatis. Yang penting, pastikan file tersebut memiliki nama create_posts_table.


Mengatur Struktur Tabel

Setelah file migration dibuka, sesuaikan isinya menjadi seperti berikut:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Menjalankan proses migration
     */
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content')->nullable();
            $table->string('image')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Mengembalikan perubahan migration
     */
    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

Penjelasan Struktur Migration

Mari kita pahami bagian pentingnya.

Schema::create('posts', ...)

Baris ini memberi tahu Laravel bahwa kita ingin membuat tabel baru bernama posts.


Kolom-Kolom Tabel

$table->id();

Membuat kolom id sebagai primary key dan auto-increment.

$table->string('title');

Kolom untuk menyimpan judul post.

$table->text('content')->nullable();

Kolom isi post. Diberi nullable() karena isi boleh kosong.

$table->string('image')->nullable();

Kolom untuk menyimpan path atau nama file gambar. Boleh kosong jika post tidak memiliki gambar.

$table->timestamps();

Membuat dua kolom otomatis:

  • created_at
  • updated_at

Method down()

Schema::dropIfExists('posts');

Bagian ini berfungsi untuk:

  • Menghapus tabel posts
  • Digunakan saat kita menjalankan rollback migration

Dengan kata lain:

  • up() → membuat tabel
  • down() → membatalkan perubahan

Langkah Selanjutnya

Setelah struktur migration selesai disesuaikan, sekarang kita tinggal menjalankannya ke database dengan perintah:

php artisan migrate

Jika tidak ada error, maka:

  • Tabel posts berhasil dibuat
  • Model Post sudah terhubung dengan database
  • Kita siap masuk ke tahap CRUD menggunakan Livewire

Pada materi berikutnya, kita akan membuat layout untuk kebutuhan UI aplikasi kita.

Daftar eBook