Eloquent memudahkan interaksi dengan database, tapi salah penggunaan bisa menyebabkan N+1 problem dan query lambat.
Eager Loading — Solusi N+1 Problem
// ❌ N+1 Problem
$posts = Post::all(); // 1 query
foreach ($posts as $post) {
echo $post->author->name; // N queries!
}
// ✅ Eager Loading $posts = Post::with(['author', 'category', 'tags'])->get();
Lazy Eager Loading
$posts = Post::all();
// Keputusan load relation belakangan
$posts->load('author');
Select Kolom yang Diperlukan
// ❌ Load semua kolom
Post::with('author')->get();
// ✅ Select kolom spesifik Post::with('author:id,name,avatar')->get(['id', 'title', 'slug']);
Query Scope
// Di Model
public function scopePopular(Builder $query, int $minViews = 1000): Builder
{
return $query->where('views', '>=', $minViews);
}
// Penggunaan Post::popular(500)->published()->latest()->get();
Chunk untuk Data Besar
// Jangan load semua ke memory
Post::chunk(500, function ($posts) {
foreach ($posts as $post) {
// Process...
}
});