· LaravelPHPBackend

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

Step 1User
User mengakses /posts/1

Routing

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:

  1. Authentication — Laravel Breeze atau Sanctum
  2. API Development — API Resources, Sanctum token auth
  3. Queue & Jobs — Background processing untuk tugas berat
  4. Testing — PHPUnit untuk memastikan kode benar
  5. 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.