zmedia

Tutorial CRUD Laravel 12 Lengkap: Panduan Step-by-Step untuk Pemula

Halo para developer! Apakah Anda ingin menguasai dasar-dasar pengembangan web dengan Laravel? Jika ya, memahami operasi CRUD (Create, Read, Update, Delete) adalah langkah awal yang krusial. Laravel, dengan arsitektur MVC (Model-View-Controller) yang elegan dan sintaks yang ekspresif, membuat implementasi CRUD menjadi sangat efisien dan menyenangkan.

Dalam tutorial lengkap ini, kita akan membahas secara tuntas bagaimana membangun aplikasi CRUD sederhana menggunakan Laravel 12. Kita akan membuat sebuah aplikasi manajemen produk yang memungkinkan pengguna untuk menambah, melihat, mengedit, dan menghapus data produk. Siap untuk menyelam lebih dalam?

Apa Itu CRUD?

Sebelum kita mulai coding, mari pahami dulu apa itu CRUD:

  • Create (C): Proses menambahkan data baru ke dalam database.
  • Read (R): Proses mengambil atau menampilkan data dari database. Ini bisa berupa menampilkan semua data atau hanya data tertentu.
  • Update (U): Proses memodifikasi data yang sudah ada di database.
  • Delete (D): Proses menghapus data dari database.

Keempat operasi ini adalah tulang punggung hampir semua aplikasi web yang berinteraksi dengan database.

Persiapan Awal Proyek Laravel

Langkah pertama adalah menyiapkan proyek Laravel 12 Anda. Pastikan Anda sudah menginstal Composer dan PHP (versi 8.2 atau lebih tinggi) di sistem Anda.

1. Instalasi Laravel 12

Buka terminal atau CMD Anda, lalu jalankan perintah berikut:

composer create-project laravel/laravel crud-produk "12.*"
cd crud-produk

2. Konfigurasi Database

Buka file .env di root proyek Anda dan sesuaikan detail koneksi database Anda. Contohnya dengan MySQL:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db_crud_produk
DB_USERNAME=root
DB_PASSWORD=

Pastikan Anda sudah membuat database dengan nama db_crud_produk di MySQL Anda.

Membuat Model dan Migrasi

Model adalah representasi tabel database Anda, dan migrasi digunakan untuk membuat atau memodifikasi struktur tabel.

3. Membuat Model Produk dan Migrasi

Jalankan perintah Artisan untuk membuat model Product beserta file migrasinya:

php artisan make:model Product -m

Perintah ini akan membuat dua file:

  • app/Models/Product.php (file Model)
  • database/migrations/YYYY_MM_DD_HHMMSS_create_products_table.php (file Migrasi)

4. Mendefinisikan Skema Tabel

Buka file migrasi yang baru dibuat (database/migrations/..._create_products_table.php) dan tambahkan kolom-kolom untuk tabel products:

// database/migrations/..._create_products_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('description')->nullable();
            $table->decimal('price', 8, 2);
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};

5. Menjalankan Migrasi

Setelah mendefinisikan skema, jalankan migrasi untuk membuat tabel products di database Anda:

php artisan migrate

Membuat Controller

Controller akan menangani logika bisnis dan berinteraksi antara Model dan View.

6. Membuat Controller Produk

Laravel memiliki fitur resource controller yang memudahkan pembuatan CRUD. Jalankan perintah ini:

php artisan make:controller ProductController --resource

Ini akan membuat file app/Http/Controllers/ProductController.php dengan metode-metode dasar CRUD yang sudah disiapkan (index, create, store, show, edit, update, destroy).

Membuat Tampilan (Views)

Tampilan adalah antarmuka pengguna tempat data akan ditampilkan dan diinteraksikan.

7. Membuat Layout Dasar

Buat file resources/views/layouts/app.blade.php sebagai layout dasar untuk semua tampilan:

<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CRUD Produk Laravel</title>
    <!-- Tambahkan CSS Anda di sini, misalnya Bootstrap via CDN -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container mt-5">
        @yield('content')
    </div>

    <!-- Tambahkan JS Anda di sini -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

8. Membuat Tampilan CRUD

Buat folder resources/views/products dan di dalamnya buat file-file berikut:

a. index.blade.php (Read All)

<!-- resources/views/products/index.blade.php -->
@extends('layouts.app')

@section('content')
    <h1>Daftar Produk</h1>

    @if (session('success'))
        <div class="alert alert-success">
            {{ session('success') }}
        </div>
    @endif

    <a href="{{ route('products.create') }}" class="btn btn-primary mb-3">Tambah Produk Baru</a>

    <table class="table table-bordered">
        <thead>
            <tr>
                <th>Nama</th>
                <th>Deskripsi</th>
                <th>Harga</th>
                <th>Aksi</th>
            </tr>
        </thead>
        <tbody>
            @forelse ($products as $product)
                <tr>
                    <td>{{ $product->name }}</td>
                    <td>{{ $product->description }}</td>
                    <td>Rp {{ number_format($product->price, 2, ',', '.') }}</td>
                    <td>
                        <a href="{{ route('products.edit', $product->id) }}" class="btn btn-warning btn-sm">Edit</a>
                        <form action="{{ route('products.destroy', $product->id) }}" method="POST" class="d-inline">
                            @csrf
                            @method('DELETE')
                            <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Apakah Anda yakin ingin menghapus produk ini?')">Hapus</button>
                        </form>
                    </td>
                </tr>
            @empty
                <tr>
                    <td colspan="4" class="text-center">Belum ada data produk.</td>
                </tr>
            @endforelse
        </tbody>
    </table>
@endsection

b. create.blade.php (Create)

<!-- resources/views/products/create.blade.php -->
@extends('layouts.app')

@section('content')
    <h1>Tambah Produk Baru</h1>

    @if ($errors->any())
        <div class="alert alert-danger">
            <ul class="mb-0">
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    <form action="{{ route('products.store') }}" method="POST">
        @csrf
        <div class="mb-3">
            <label for="name" class="form-label">Nama Produk</label>
            <input type="text" class="form-control" id="name" name="name" value="{{ old('name') }}" required>
        </div>
        <div class="mb-3">
            <label for="description" class="form-label">Deskripsi</label>
            <textarea class="form-control" id="description" name="description" rows="3">{{ old('description') }}</textarea>
        </div>
        <div class="mb-3">
            <label for="price" class="form-label">Harga</label>
            <input type="number" step="0.01" class="form-control" id="price" name="price" value="{{ old('price') }}" required>
        </div>
        <button type="submit" class="btn btn-success">Simpan Produk</button>
        <a href="{{ route('products.index') }}" class="btn btn-secondary">Batal</a>
    </form>
@endsection

c. edit.blade.php (Update)

<!-- resources/views/products/edit.blade.php -->
@extends('layouts.app')

@section('content')
    <h1>Edit Produk: {{ $product->name }}</h1>

    @if ($errors->any())
        <div class="alert alert-danger">
            <ul class="mb-0">
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    <form action="{{ route('products.update', $product->id) }}" method="POST">
        @csrf
        @method('PUT')
        <div class="mb-3">
            <label for="name" class="form-label">Nama Produk</label>
            <input type="text" class="form-control" id="name" name="name" value="{{ old('name', $product->name) }}" required>
        </div>
        <div class="mb-3">
            <label for="description" class="form-label">Deskripsi</label>
            <textarea class="form-control" id="description" name="description" rows="3">{{ old('description', $product->description) }}</textarea>
        </div>
        <div class="mb-3">
            <label for="price" class="form-label">Harga</label>
            <input type="number" step="0.01" class="form-control" id="price" name="price" value="{{ old('price', $product->price) }}" required>
        </div>
        <button type="submit" class="btn btn-success">Update Produk</button>
        <a href="{{ route('products.index') }}" class="btn btn-secondary">Batal</a>
    </form>
@endsection

Mendefinisikan Rute (Routes)

Rute akan mengarahkan permintaan HTTP ke metode Controller yang sesuai.

9. Mendefinisikan Rute Resource

Buka file routes/web.php dan tambahkan rute resource untuk produk:

// routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;

Route::get('/', function () {
    return redirect()->route('products.index');
});

Route::resource('products', ProductController::class);

Route::resource('products', ProductController::class); secara otomatis membuat rute-rute berikut:

  • GET /products (index)
  • GET /products/create (create)
  • POST /products (store)
  • GET /products/{product} (show)
  • GET /products/{product}/edit (edit)
  • PUT/PATCH /products/{product} (update)
  • DELETE /products/{product} (destroy)

Implementasi Logika CRUD di Controller

Sekarang saatnya mengisi metode-metode di app/Http/Controllers/ProductController.php.

10. Mengisi Metode Controller

Buka app/Http/Controllers/ProductController.php dan modifikasi kodenya menjadi seperti ini:

// app/Http/Controllers/ProductController.php
namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    /
     * Display a listing of the resource.
     */
    public function index()
    {
        $products = Product::all(); // Mengambil semua data produk
        return view('products.index', compact('products')); // Mengirim data ke view index
    }

    /
     * Show the form for creating a new resource.
     */
    public function create()
    {
        return view('products.create'); // Menampilkan form tambah produk
    }

    /
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        // Validasi data yang masuk
        $validatedData = $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
            'price' => 'required|numeric|min:0',
        ]);

        Product::create($validatedData); // Membuat produk baru

        return redirect()->route('products.index')->with('success', 'Produk berhasil ditambahkan!'); // Redirect dengan pesan sukses
    }

    /
     * Display the specified resource.
     */
    public function show(Product $product)
    {
        // Untuk tutorial ini, kita tidak akan membuat halaman show terpisah.
        // Data biasanya ditampilkan di index atau form edit.
        return view('products.show', compact('product')); // Opsional jika Anda ingin membuat halaman detail
    }

    /
     * Show the form for editing the specified resource.
     */
    public function edit(Product $product)
    {
        // Route Model Binding otomatis mencari produk berdasarkan ID
        return view('products.edit', compact('product')); // Menampilkan form edit dengan data produk
    }

    /
     * Update the specified resource in storage.
     */
    public function update(Request $request, Product $product)
    {
        // Validasi data yang masuk
        $validatedData = $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
            'price' => 'required|numeric|min:0',
        ]);

        $product->update($validatedData); // Memperbarui data produk

        return redirect()->route('products.index')->with('success', 'Produk berhasil diperbarui!'); // Redirect dengan pesan sukses
    }

    /
     * Remove the specified resource from storage.
     */
    public function destroy(Product $product)
    {
        // Menghapus data produk
        $product->delete();

        return redirect()->route('products.index')->with('success', 'Produk berhasil dihapus!'); // Redirect dengan pesan sukses
    }
}

Penjelasan Singkat:

  • Route Model Binding: Pada metode show, edit, update, dan destroy, kita menggunakan Product $product sebagai parameter. Laravel secara otomatis akan mencari produk dengan ID yang cocok dari URL dan menginjeksikan instance model Product. Ini sangat mempermudah pengambilan data.
  • Validasi Data: Metode $request->validate() digunakan untuk memvalidasi data yang dikirimkan melalui form. Jika validasi gagal, Laravel akan secara otomatis mengarahkan kembali pengguna ke form sebelumnya dengan pesan error.
  • Flash Message: Kita menggunakan ->with('success', 'Pesan Anda') untuk mengirimkan pesan singkat (flash message) yang akan ditampilkan di tampilan setelah operasi berhasil.

Menjalankan Aplikasi

Setelah semua langkah selesai, saatnya mencoba aplikasi CRUD Anda.

11. Menjalankan Server Pengembangan Laravel

Buka terminal di root proyek Anda dan jalankan perintah:

php artisan serve

Ini akan memulai server pengembangan di http://127.0.0.1:8000. Buka browser Anda dan navigasi ke alamat tersebut (atau langsung ke http://127.0.0.1:8000/products).

Anda sekarang dapat menambah, melihat, mengedit, dan menghapus produk melalui antarmuka web yang Anda buat.

Kesimpulan

Selamat! Anda telah berhasil membangun aplikasi CRUD lengkap dengan Laravel 12. Anda telah belajar bagaimana membuat model dan migrasi, mendefinisikan rute, membangun tampilan Blade, dan mengimplementasikan logika di controller untuk setiap operasi CRUD.

Memahami CRUD adalah fondasi utama dalam pengembangan web. Dengan Laravel, proses ini menjadi jauh lebih cepat dan terstruktur berkat fitur-fitur seperti Resource Controller, Route Model Binding, dan sistem validasi yang kuat. Dari sini, Anda bisa mengembangkan aplikasi Anda lebih jauh dengan menambahkan otentikasi, relasi antar tabel, atau fitur-fitur yang lebih kompleks.

Teruslah belajar dan bereksplorasi dengan Laravel!

TAGS: Laravel 12, CRUD, Tutorial Laravel, Panduan Laravel, PHP, Pengembangan Web, Database, Belajar Laravel, MVC
A modern, minimalist illustration showing a computer screen with Laravel code on one side and a stylized database icon on the other. Connecting lines or arrows indicate data flow for Create, Read, Update, Delete operations. The overall aesthetic should be clean, professional, and use a color palette that includes Laravel's purple.

Posting Komentar untuk "Tutorial CRUD Laravel 12 Lengkap: Panduan Step-by-Step untuk Pemula"