Seri Belajar Laravel: ← Part 3 — Database & Migration  |  Part 4 — Eloquent ORM  |  Part 5 — Form & CRUD →

Di Part 3 kita sudah bisa memasukkan data dengan DB::table('catatan')->insert([...]). Cara itu memang bekerja, tapi ada cara yang jauh lebih nyaman: Eloquent ORM.

Dengan Eloquent, satu baris Catatan::all() sudah cukup untuk mengambil semua data. Tidak perlu tulis SQL sama sekali.

Apa itu ORM?

ORM (Object-Relational Mapping) adalah teknik yang "menerjemahkan" tabel database menjadi object PHP. Setiap baris tabel menjadi satu object, setiap kolom menjadi property object tersebut.

# Tanpa ORM (SQL mentah):
$data = DB::select("SELECT * FROM catatan WHERE id = 1");
echo $data[0]->judul;

# Dengan Eloquent ORM:
$catatan = Catatan::find(1);
echo $catatan->judul;  // jauh lebih bersih!

📋 Progress Belajarmu

① Buat Model

php artisan make:model Catatan

File app/Models/Catatan.php terbuat. Buka dan tambahkan $fillable:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Catatan extends Model
{
    // Kolom yang boleh diisi massal (mass assignment)
    protected $fillable = ['judul', 'isi', 'penting'];
}
Kenapa perlu $fillable? Laravel melindungi dari serangan mass assignment — pengguna jahat yang mengirim field yang tidak seharusnya (misal: role=admin). Dengan $fillable, kamu secara eksplisit menyatakan kolom mana yang boleh diisi.

Eloquent secara otomatis tahu bahwa model Catatan terhubung ke tabel catatan (nama model → plural snake_case). Tidak perlu konfigurasi tambahan.

② Ambil Semua Data

Update CatatanController:

<?php

namespace App\Http\Controllers;

use App\Models\Catatan;  // ← import model
use Illuminate\Http\Request;

class CatatanController extends Controller
{
    public function index()
    {
        // Ambil semua catatan, terbaru di atas
        $catatan = Catatan::latest()->get();

        return view('catatan.index', compact('catatan'));
    }
}

Update view catatan/index.blade.php — data sekarang adalah object Eloquent, bukan array:

@foreach ($catatan as $item)
    <div class="card {{ $item->penting ? 'penting' : '' }}">
        <h3><a href="/catatan/{{ $item->id }}">{{ $item->judul }}</a></h3>
        <p>{{ $item->isi }}</p>
        @if($item->penting)
            <span style="color:#dc2626;font-size:0.8rem;">⭐ Penting</span>
        @endif
        <small style="color:#94a3b8;">{{ $item->created_at->diffForHumans() }}</small>
    </div>
@endforeach

@if($catatan->isEmpty())
    <p>Belum ada catatan. <a href="/catatan/create">Tambah catatan baru</a></p>
@endif

③ Cari Satu Data

Update method show di controller:

public function show($id)
{
    // findOrFail: otomatis tampilkan 404 kalau tidak ditemukan
    $catatan = Catatan::findOrFail($id);

    return view('catatan.show', compact('catatan'));
}  

Update view catatan/show.blade.php:

<h1>{{ $catatan->judul }}</h1>
<p>{{ $catatan->isi }}</p>
<small>Dibuat: {{ $catatan->created_at->format('d M Y, H:i') }}</small>

Cheatsheet Eloquent yang Sering Dipakai

KodeFungsi
Catatan::all()Ambil semua baris
Catatan::latest()->get()Semua baris, terbaru dulu
Catatan::find(5)Cari baris dengan id=5 (null kalau tidak ada)
Catatan::findOrFail(5)Cari id=5, tampilkan 404 kalau tidak ada
Catatan::where('penting', true)->get()Filter berdasarkan kondisi
Catatan::where('judul', 'like', '%belajar%')->get()Pencarian teks
Catatan::count()Hitung jumlah baris
Catatan::create([...])Buat baris baru
$catatan->update([...])Update baris
$catatan->delete()Hapus baris

④ Tambah Data via Tinker

Coba tambah data dari Tinker supaya ada yang tampil di browser:

php artisan tinker

Catatan::create(['judul' => 'Belajar Eloquent', 'isi' => 'Berhasil pakai ORM!', 'penting' => true]);
Catatan::create(['judul' => 'Belanja mingguan', 'isi' => 'Beras, minyak, sabun', 'penting' => false]);
Catatan::create(['judul' => 'Deadline project', 'isi' => 'Selesaikan fitur login minggu ini', 'penting' => true]);

Buka http://localhost:8000/catatan — data dari database tampil!

Langkah Selanjutnya

Sekarang kamu sudah bisa membaca data dari database. Di Part 5 — Form, Validasi & CRUD Lengkap, kita akan membuat form HTML, menerima input dari user, memvalidasinya, dan melengkapi semua operasi CRUD: Create, Read, Update, Delete.