Belajar Laravel 13 #5: Keajaiban Eloquent ORM (Model dan Controller)

Heru Iryanto
Heru Iryanto
Teacher, Content Creator and Full-Stack Developer

Jika ada satu alasan mengapa Taylor Otwell (Pencipta Laravel) pantas disembah di dunia PHP, itu adalah penemuannya yang bernama Eloquent ORM (Object-Relational Mapping).

Eloquent ORM adalah sebuah teknik pemrograman yang memungkinkan kita untuk berinteraksi dengan database menggunakan sintaks PHP murni, tanpa perlu menulis kode SQL mentah. Eloquent ORM adalah pilar utama dari arsitektur MVC (Model-View-Controller) yang digunakan oleh Laravel.

Di kelas PHP Prosedural, ketika Anda disuruh mengambil artikel yang ID-nya 5, Anda harus menulis kodingan kotor sepanjang ini:

$koneksi = mysqli_connect("localhost", "root", "", "db_saya");
$query = "SELECT * FROM artikels WHERE id = 5 LIMIT 1";
$hasil = mysqli_query($koneksi, $query);
$data = mysqli_fetch_assoc($hasil);

Dengan Eloquent ORM milik Laravel, Anda hanya perlu mengetik:

$data = Artikel::find(5);

BOOM! Hanya 1 Baris. Tidak ada mysqli_connect, tidak ada bahasa SQL murni, murni pendekatan objek (OOP).

1️⃣ Menghidupkan Avatar Model

Model adalah pilar huruf ‘M’ pada pola MVC. Di Laravel, 1 Tabel di dalam Database (Misal tabel artikels) MUTLAK harus diwakilkan oleh 1 buah Avatar (Class) bernama Model. Model bertugas sebagai agen negosiator antara Kodingan dengan MySQL.

Di materi sebelumnya kita sudah membuat tabel artikel agar dapat menggunakan seeding. Model pun sudah kita bahas sedikit, dan sudah kita buat. Jika di materi sebelumnya kamu sudah membuat model Artikel, silakan lanjutkan membaca. Namun jika belum, silakan buat model Artikel terlebih dahulu dengan perintah dibawah ini:

php artisan make:model Artikel

File akan tercipta di dalam folder app/Models/Artikel.php.

2️⃣ Mantra-Mantra Operasi Eloquent (CRUD)

Setelah Model Artikel siap, kodingan-kodingan di bawah ini nantinya akan disisipkan di dalam file Controller. Kita tidak akan mengeksekusi ini di dalam Route web.php secara langsung! Berikut adalah berbagai mantra sakti untuk menembus isi Database:

A. Operasi Baca (Read / SELECT)

use App\Models\Artikel; // Panggil dari Namespacenya

// Menarik SELURUH (20 baris) artikel sekaligus ke dalam Array Raksasa (Collection)
$semua = Artikel::all();

// Mencari baris tunggal berdasarkan Primary Key ID ke-5
$satu_biji = Artikel::find(5);

// Mencari menggunakan logika WHERE (Tarik artikel yang judulnya "Kecelakaan")
$berita = Artikel::where('judul', 'Kecelakaan')->first();

B. Operasi Simpan Baru (Create / INSERT)

$baru = new Artikel();
$baru->judul = "Judul Berita Terbaru";
$baru->isi_berita = "Ini adalah paragraf berita saya...";
$baru->save(); // Mantra Eksekusi mutlak agar masuk ke TablePlus MySQL

C. Operasi Ubah (Update)

// Tarik dulu target datanya (Misal ID 3), lalu ubah datanya, lalu save.
$edit = Artikel::find(3);
$edit->judul = "Judul Yang Telah Diperbaiki";
$edit->save(); 

D. Operasi Hancurkan (Delete)

// Tarik korbannya, lalu binasakan
$korban = Artikel::find(4);
$korban->delete();

3️⃣ Relasi Sakti Antar Tabel (Relationship)

Ini adalah senjata rahasia Eloquent. Dalam Database sungguhan, Tabel tidak berdiri sendiri. Ada relasi logika. Misalnya: Sebuah Website punya Tabel User (Penulis) dan Tabel Artikel (Berita). Logikanya: Satu User bisa menulis Banyak Artikel (One-To-Many / Has Many).

Kita cukup memberi tahu sang Model tentang hubungan darah tersebut!

Di file app/Models/User.php, tambahkan fungsi:

public function artikels() {
    // Halo Laravel, Saya (Satu User) MENGUASAI/MEMILIKI BANYAK (hasMany) Artikel.
    return $this->hasMany(Artikel::class);
}

Sekarang, jika Anda ingin mencari tahu “Apa saja artikel yang ditulis oleh Budi (ID 1)?” Anda cukup memanggilnya layaknya memanggil anak panah (Property):

// Cari user ID 1
$budi = User::find(1);

// Dapatkan SEMUA karya tulisan miliknya secara otomatis tanpa Join Table SQL manual!
$kumpulan_tulisan_budi = $budi->artikels; 

🗽 Kesimpulan

Jika Anda mencoba membaca kode SQL murni menggunakan INNER JOIN di PHP Prosedural, kepala Anda akan sangat sakit. Eloquent membungkus bahasa-bahasa kotor SQL ke dalam perkataan bahasa manusia biasa yang sangat ramah di baca layaknya buku bahasa Inggris.

Model (Sang Negosiator Data) telah bekerja dengan sempurna! Tetapi kita butuh seseorang untuk menugaskan Sang Model dan menjembatani penangkap Formulir Isian dari Pengunjung Website. Dialah Sang Pelayan Eksekutor di materi selanjutnya, yaitu Controller dan Request Validation.