Belajar Laravel untuk Pemula: MVC, Routing, dan Eloquent
Panduan belajar Laravel dari nol — memahami MVC, routing, Eloquent ORM, middleware, dan cara membangun web app dengan Laravel.
Laravel adalah framework PHP paling populer untuk membangun web application. Dengan filosofi “developer happiness”, Laravel menyediakan tools yang elegan untuk routing, database, authentication, dan hampir semua kebutuhan backend modern.
Kenapa Laravel?
- Eloquent ORM — Interaksi database yang ekspresif dan intuitif
- Artisan CLI — Command-line tool yang powerful
- Migration — Version control untuk database schema
- Built-in auth — Sistem login/register siap pakai
- Ekosistem lengkap — Queue, cache, email, file storage, broadcasting
Apa Itu MVC?
Laravel menggunakan pola arsitektur MVC (Model-View-Controller):
- Model — Representasi data dan logika bisnis (berinteraksi dengan database)
- View — Tampilan yang dilihat user (HTML, Blade template)
- Controller — Penghubung antara Model dan View (menerima request, mengembalikan response)
User → Request → Controller → Model → Database
↓
View → Response → User
Alur sederhana: user mengakses URL → controller memproses → ambil data dari model → tampilkan di view.
Lihat Alur MVC
Klik Play untuk melihat bagaimana request mengalir dari user sampai response:
Laravel MVC Flow
User mengakses /posts/1Routing
Route adalah pemetaan antara URL dan kode yang dijalankan:
// routes/web.php
Route::get('/', function () {
return view('welcome');
});
Route::get('/about', function () {
return 'Halaman About';
});
// Route ke controller
Route::get('/users', [UserController::class, 'index']);
Route::get('/users/{id}', [UserController::class, 'show']);
Route::post('/users', [UserController::class, 'store']);
Route Parameters
Route::get('/posts/{slug}', function (string $slug) {
return "Post: {$slug}";
});
// Optional parameter
Route::get('/users/{name?}', function (?string $name = 'Guest') {
return "Hello, {$name}";
});
Resource Routes
Satu baris untuk semua CRUD routes:
Route::resource('posts', PostController::class);
Ini otomatis membuat 7 route: index, create, store, show, edit, update, destroy.
Controller
Controller mengorganisasi logika request handling:
// app/Http/Controllers/PostController.php
class PostController extends Controller
{
public function index()
{
$posts = Post::latest()->paginate(10);
return view('posts.index', compact('posts'));
}
public function show(Post $post)
{
return view('posts.show', compact('post'));
}
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|max:255',
'body' => 'required',
]);
Post::create($validated);
return redirect('/posts')->with('success', 'Post berhasil dibuat!');
}
}
Perhatikan Route Model Binding: show(Post $post) — Laravel otomatis mencari Post berdasarkan ID dari URL.
Eloquent ORM
Eloquent adalah cara Laravel berinteraksi dengan database. Setiap tabel punya Model:
// app/Models/Post.php
class Post extends Model
{
protected $fillable = ['title', 'body', 'user_id'];
public function user()
{
return $this->belongsTo(User::class);
}
public function comments()
{
return $this->hasMany(Comment::class);
}
}
Query yang Ekspresif
// Ambil semua
$posts = Post::all();
// Filter
$published = Post::where('status', 'published')->get();
// Sorting
$latest = Post::latest()->take(5)->get();
// Relasi
$postWithComments = Post::with('comments')->find(1);
// Aggregasi
$count = Post::where('user_id', 1)->count();
// Create
Post::create([
'title' => 'Post Baru',
'body' => 'Konten post...',
'user_id' => auth()->id(),
]);
// Update
$post->update(['title' => 'Judul Baru']);
// Delete
$post->delete();
Eloquent membuat query database terasa seperti menulis kalimat biasa.
Migration
Migration adalah version control untuk database schema:
// database/migrations/create_posts_table.php
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->string('title');
$table->text('body');
$table->enum('status', ['draft', 'published'])->default('draft');
$table->timestamps();
});
}
Jalankan migration:
php artisan migrate # Jalankan migration
php artisan migrate:rollback # Undo migration terakhir
php artisan migrate:fresh # Reset semua dan jalankan ulang
Blade Templates
Blade adalah templating engine Laravel:
{{-- resources/views/posts/index.blade.php --}}
@extends('layouts.app')
@section('content')
<h1>Daftar Post</h1>
@forelse($posts as $post)
<article>
<h2>{{ $post->title }}</h2>
<p>{{ Str::limit($post->body, 150) }}</p>
<small>Oleh {{ $post->user->name }} - {{ $post->created_at->diffForHumans() }}</small>
</article>
@empty
<p>Belum ada post.</p>
@endforelse
{{ $posts->links() }}
@endsection
Blade directives: @if, @foreach, @forelse, @auth, @guest, @csrf, dan banyak lagi.
Middleware
Middleware mem-filter HTTP request sebelum sampai ke controller:
// Route yang butuh login
Route::middleware('auth')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
Route::resource('posts', PostController::class);
});
Validation
Laravel punya sistem validasi yang powerful:
$validated = $request->validate([
'title' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'body' => 'required|min:10',
'image' => 'nullable|image|max:2048',
]);
Kalau validasi gagal, Laravel otomatis redirect kembali dengan pesan error.
Artisan CLI
Artisan adalah command-line tool Laravel:
php artisan make:model Post -mcr # Model + migration + controller (resource)
php artisan make:middleware CheckAge # Buat middleware
php artisan tinker # PHP REPL dengan context Laravel
php artisan route:list # Lihat semua route
php artisan db:seed # Jalankan seeder
Langkah Selanjutnya
Setelah menguasai dasar Laravel:
- Authentication — Laravel Breeze atau Sanctum
- API Development — API Resources, Sanctum token auth
- Queue & Jobs — Background processing untuk tugas berat
- Testing — PHPUnit untuk memastikan kode benar
- Deployment — Laravel Forge, Vercel, atau manual VPS
Laravel adalah framework yang sangat lengkap. Mulai dari yang sederhana — buat CRUD, pahami alurnya, lalu perlahan eksplorasi fitur-fitur yang lebih advanced.