Pernah nggak kamu nulis query SQL panjang kayak SELECT * FROM users WHERE id = 1 AND status = 'active' dan langsung pusing sendiri? Nah, di sinilah Laravel hadir sebagai penyelamat. Salah satu fitur paling keren dari Laravel adalah Eloquent ORM — sebuah sistem yang bikin kamu bisa berinteraksi dengan database layaknya ngobrol pakai bahasa Indonesia, bukan SQL yang kaku. Di artikel ke-10 dari seri 50 Artikel Belajar Laravel ini, kita akan bedah tuntas apa itu Model di Laravel, gimana cara kerjanya, dan kenapa Eloquent ORM bakal jadi sahabat terbaikmu dalam membangun aplikasi.
Eloquent ORM (Object-Relational Mapping) adalah fitur bawaan Laravel yang memungkinkan kamu berinteraksi dengan tabel database menggunakan class PHP (Model) — tanpa perlu menulis SQL secara manual. Setiap tabel database direpresentasikan oleh satu Model, dan setiap baris data di tabel menjadi satu objek (instance) dari Model tersebut.
🗂️ Apa Itu Model di Laravel?
Bayangkan database-mu adalah sebuah lemari arsip kantor. Setiap laci di lemari itu adalah tabel (misalnya: laci "Users", laci "Products"). Nah, Model di Laravel itu ibarat seorang petugas arsip yang super pintar — dia tahu persis laci mana yang harus dibuka, data apa yang harus diambil, dan bahkan bisa menyimpan atau mengubah data tanpa kamu perlu turun tangan langsung.
Di Laravel, setiap Model adalah sebuah class PHP yang extends dari Illuminate\Database\Eloquent\Model. Secara default, satu Model merepresentasikan satu tabel di database. Misalnya, Model User akan otomatis terhubung ke tabel users.
Tips Konvensi Nama
Laravel menggunakan konvensi singular untuk nama Model dan plural untuk nama tabel. Jadi Model Product → tabel products. Model BlogPost → tabel blog_posts. Laravel yang ngurusinnya otomatis!
Cara Membuat Model di Laravel
Buka terminal dan jalankan perintah Artisan
Laravel punya CLI tool bernama Artisan yang mempercepat pekerjaan kita. Cukup satu baris perintah untuk membuat file Model baru.
php artisan make:model Product
# Buat Model + Migration sekaligus (rekomendasi!)
php artisan make:model Product -m
Lihat file Model yang baru dibuat
File akan muncul di folder app/Models/Product.php. Inilah struktur dasarnya:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
// Otomatis terhubung ke tabel 'products'
protected $fillable = ['name', 'price', 'description'];
}
Pahami properti $fillable
Properti $fillable mendefinisikan kolom mana saja yang boleh diisi secara massal (mass assignment). Ini penting untuk keamanan aplikasimu dari serangan mass assignment vulnerability.
Perhatian Penting!
Jangan pernah pakai $guarded = [] di production tanpa pertimbangan matang. Ini berarti semua kolom bisa diisi dari luar — potensi celah keamanan yang berbahaya. Selalu definisikan $fillable secara eksplisit!
⚡ Operasi CRUD dengan Eloquent ORM
Ini dia bagian yang paling bikin kamu jatuh cinta sama Eloquent. Bayangkan kamu punya tabel products di database. Dengan Eloquent, semua operasi CRUD (Create, Read, Update, Delete) bisa dilakukan dengan sintaks yang super bersih dan mudah dibaca, seperti ini:
Insight Penting: find() vs findOrFail()
Gunakan findOrFail(1) daripada find(1) di production. Kalau data tidak ditemukan, find() mengembalikan null dan bisa menyebabkan error misterius. Sedangkan findOrFail() otomatis lempar exception 404. Lebih aman!
Tabel Metode Query Eloquent yang Paling Sering Dipakai
| Metode | Fungsi | Return Type |
|---|---|---|
all() |
Ambil semua data dari tabel | Collection |
find($id) |
Cari berdasarkan primary key | Model atau null |
findOrFail($id) |
Cari atau lempar 404 | Model atau Exception |
where()->get() |
Query dengan kondisi tertentu | Collection |
first() |
Ambil satu data pertama | Model atau null |
create([]) |
Buat dan simpan data baru | Model |
paginate($n) |
Ambil data dengan paginasi | LengthAwarePaginator |
🔗 Relasi Antar Model: Kekuatan Sesungguhnya Eloquent ORM
Kalau tadi kamu sudah paham operasi CRUD dasar, sekarang kita naik level. Kecanggihan Eloquent sesungguhnya ada di kemampuannya mengelola relasi antar tabel. Bayangkan seperti hubungan antar manusia — seorang User bisa punya banyak Post (one-to-many), dan satu Post dimiliki oleh satu User (belongs-to).
Di Laravel, relasi ini ditulis langsung di dalam class Model sebagai method, dan hasilnya bisa dipanggil semudah mengakses properti objek biasa.
hasOne()
Satu-ke-satu
Contoh: User → Profile
hasMany()
Satu-ke-banyak
Contoh: User → Posts
belongsTo()
Kebalikan hasMany
Contoh: Post → User
belongsToMany()
Banyak-ke-banyak
Contoh: Post → Tags
Fakta Menarik: Eager Loading
Saat mengambil relasi, Eloquent default menggunakan lazy loading yang bisa menyebabkan masalah N+1 query — query yang berulang sebanyak jumlah data. Solusinya? Gunakan with('posts') untuk eager loading: User::with('posts')->get(). Ini mengambil semua data cukup dalam 2 query saja!
🏗️ Model dalam Arsitektur MVC Laravel
Kamu pasti ingat di artikel-artikel sebelumnya kita sudah belajar tentang routing laravel dan Controller. Nah, sekarang mari kita lihat bagaimana Model berteman dengan komponen-komponen itu dalam satu skenario nyata. Di arsitektur MVC (Model-View-Controller), alur kerjanya seperti ini:
Route menerima request dari browser
Routing laravel di routes/web.php menangkap URL dan meneruskan ke Controller yang sesuai.
Controller memanggil Model
Controller menggunakan Eloquent untuk mengambil data dari database lewat Model yang tersedia.
Model berinteraksi dengan database
Eloquent menerjemahkan panggilan method PHP menjadi SQL query dan mengembalikan hasilnya sebagai objek.
Data dikirim ke View
Controller mengoper data dari Model ke template Blade untuk ditampilkan kepada pengguna.
Tips: Manfaatkan Route Model Binding
Laravel punya fitur Route Model Binding yang bisa menyederhanakan kode Controller-mu lebih jauh. Daripada menulis Product::findOrFail($id), kamu cukup type-hint Model di parameter method: public function show(Product $product) — Laravel otomatis carikan datanya!
📖 Navigasi Seri 50 Artikel Belajar Laravel
No comments:
Post a Comment