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'];
}
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
| Kode | Fungsi |
|---|---|
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.
Komentar 0