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.php siap, kodingan-kodingan di bawah ini nantinya akan disisipkan di dalam file ArtikelController.php yang nanti akan kita buat. Di materi ini, kita PAHAMI dulu ya konsepnya, praktiknya akan kita lakukan di materi selanjutnya. Jadi, praktik membuat Controller nya akan ada di materi selanjutnya ya, di materi ini kita hanya akan membahas tentang model dan mantra-mantra operasi Eloquent.

Berikut adalah berbagai mantra sakti untuk menembus isi Database yang WAJIB anda ketahui:

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();

Diatas adalah contoh untuk menampilkan data, baik semua data, satu data ataupun berdasarkan kondisi tertentu seperti fitur pencarian.

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

Diatas adalah cara menambahkan data baru dengan new Article().

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(); 

Hampir sama seperti menambahkan data baru, namun kita harus menemukan dulu data yang mau diubah, yaitu dengan Artikel::find(id).

D. Operasi Hancurkan (Delete)

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

Diatas adalah cara menghapus data. Hampir sama seperti dengan update data, kita harus menemukan dulu data yang mau dihapus, yaitu dengan Artikel::find(id), bedanya kita menggunakan delete() untuk menghapus data.

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);
}

Sedangkan untuk kebalikannya, yaitu satu artikel dimiliki oleh satu user, maka di file app/Models/Artikel.php tambahkan fungsi:

public function user() {
    // Halo Laravel, Saya (Satu Artikel) DIKUASAI/DIMILIKI OLEH SATU (belongsTo) User.
    return $this->belongsTo(User::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; 

Selain relasi hasMany() dan belongsTo(), Eloquent juga memiliki relasi belongsToMany() yang digunakan untuk relasi many-to-many, yaitu relasi antara dua tabel yang memiliki banyak data dan saling berhubungan. Contohnya, satu mahasiswa bisa memiliki banyak mata kuliah dan satu mata kuliah bisa dimiliki oleh banyak mahasiswa.

Untuk relasi belongsToMany(), kita perlu membuat tabel perantara (tabel pivot) yang menghubungkan kedua tabel tersebut. Contohnya, tabel mahasiswa_mata_kuliah yang menghubungkan tabel mahasiswa dan mata_kuliah.

Relasi-relasi yang ada di Laravel antara lain :

  1. One-to-One (Satu-ke-Satu). Contohnya : Satu User memiliki Satu Foto Profil. Menggunakan hasOne() dan belongsTo().
  2. One-to-Many (Satu-ke-Banyak). Contohnya : Satu User memiliki Banyak Artikel. Menggunakan hasMany() dan belongsTo().
  3. Many-to-Many (Banyak-ke-Banyak). Contohnya : Satu Mahasiswa memiliki Banyak Mata Kuliah dan Satu Mata Kuliah dimiliki oleh Banyak Mahasiswa. Menggunakan belongsToMany() dan belongsToMany().
  4. Polymorphic Relationship (Relasi Polimorfik). Contohnya : Artikel memiliki banyak Komentar, dan Video juga memiliki banyak Komentar. Menggunakan morphMany() dan morphTo().

Yang akan sering kita gunakan di dalam project-project selanjutnya yaitu relasi One-to-One (Satu-ke-Satu), One-to-Many (Satu-ke-Banyak) dan Many-to-Many (Banyak-ke-Banyak).

🗽 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.