Tutorial Laravel 12 #5: Menampilkan Data dari Database


Tutorial Laravel 12 #5: Menampilkan Data dari Database

Halo teman-teman semuanya, pada artikel sebelumnya kita telah belajar bagaimana membuat sebuah Model dan Migration di dalam Laravel 12. Kali ini, kita akan mempelajari cara menampilkan data dari database menggunakan view di Laravel 12.

Langkah 1 - Membuat Controller Product

Untuk menampilkan data dari database, kita memerlukan sebuah Controller. Controller berfungsi sebagai penghubung antara Model (database) dan View**** (tampilan antarmuka pengguna). Dengan menggunakan Controller, kita dapat mengambil data dari database dan mengirimkannya ke View agar bisa ditampilkan kepada pengguna.

Mari kita mulai dengan membuat Controller untuk mengelola data Product. Silahkan jalankan perintah berikut ini di dalam terminal/CMD dan pastikan berada di dalam folder project Laravel-nya.

php artisan make:controller ProductController

Perintah di atas akan membuat sebuah Controller baru dengan nama ProductController.php, yang secara otomatis akan disimpan di dalam folder: app/Http/Controllers.

Silahkan buka file tersebut, kemudian ubah semua kode-nya menjadi seperti berikut ini.

app/Http/Controllers/ProductController.php

<?php

namespace App\Http\Controllers;

//import model product
use App\Models\Product; 

//import return type View
use Illuminate\View\View;

class ProductController extends Controller
{
    /**
     * index
     *
     * @return void
     */
    public function index() : View
    {
        //get all products
        $products = Product::latest()->paginate(10);

        //render view with products
        return view('products.index', compact('products'));
    }
}

Dari perubahan kode di atas, pertama kita tentukan namespace atau lokasi controller ini berada.

namespace App\Http\Controllers;

Kemudian kita import Model Product, dimana digunakan untuk mengambil data dari tabel products di database.

//import model product
use App\Models\Product; 

Selanjutnya, kita import class View yang nanti digunakan sebagai tipe pengembalian untuk method index.

//import return type View
use Illuminate\View\View;

Setelah itu, di dalam class ProductController kita membuat sebuah method baru dengan nama index.

public function index() : View
{

	//...
	
}

Di dalam method di atas, kita melakukan get data products dari table products yang ada di database menggunakan Model Product.

//get all products
$products = Product::latest()->paginate(10);

Di atas, kita urutkan data yang ditampilkan berdasarkan yang paling terbaru, yaitu dengan menggunakan method latest.

Dan kita akan tampilkan data pada setiap halaman sejumlah 10 item atau record dan method yang digunakan adalah paginate.

Terakhir, kita mengembalikan data produk yang telah diambil ke tampilan products.index menggunakan kode berikut:

// Render view with products
return view('products.index', compact('products'));

Fungsi compact() di atas digunakan untuk membuat array asosiatif dari variable products. Sehingga data produk bisa diakses di dalam view.

Langkah 2 - Membuat Route Products

Laravel menyediakan Route Resource, yaitu cara singkat untuk mendefinisikan semua route CRUD (Create, Read, Update, Delete) dalam satu baris kode.

Silakan buka file routes/web.php, kemudian ubah semua kode-nya menjadi seperti berikut ini.

routes/web.php

<?php

use Illuminate\Support\Facades\Route;

//import product controller
use App\Http\Controllers\ProductController;

//route resource for products
Route::resource('/products', ProductController::class);

Route::get('/', function () {
    return view('welcome');
});

Dengan hanya satu baris kode di atas, Laravel otomatis membuat 7 route bawaan untuk CRUD produk. Untuk melihat daftar lengkap route yang dibuat, jalankan perintah berikut di dalam terminal/CMD.

php artisan route:list

Output yang akan muncul di terminal/CMD.

METHOD URI CONTROLLER METHOD KETERANGAN
GET /products index() Menampilkan daftar produk
GET /products/create create() Menampilkan form tambah produk
POST /products store() Menyimpan data produk baru ke database
GET /products/{product} show() Menampilkan detail produk berdasarkan ID
GET /products/{product}/edit edit() Menampilkan form edit produk berdasarkan ID
PUT/PATCH /products/{product} update() Memperbarui data produk berdasarkan ID
DELETE /products/{product} destroy() Menghapus produk berdasarkan ID

Langkah 3 - Membuat View Products Index

Laravel secara default menyimpan tampilan atau view di dalam folder resources/views. Karena kita akan membuat tampilan lists data produk, sekarang silahkan buat folder baru dengan nama products di dalam views, lalu buat file baru di dalamnya dengan nama index.blade.php.

Kurang lebih struktur folder-nya seperti berikut ini.

📂 laravel-12
 ├── 📂 app
 │    ├── 📂 Http
 │    │    ├── 📂 Controllers
 │    │    │    ├── ProductController.php  <-- Controller untuk produk
 │
 ├── 📂 routes
 │    ├── web.php  <-- File routing utama termasuk route resource products
 │
 ├── 📂 resources
 │    ├── 📂 views
 │    │    ├── 📂 products
 │    │    │    ├── index.blade.php  <-- View lists produk

Silahkan buka file resources/views/products/index.blade.php, kemudian masukkan kode berikut ini di dalamnya.

resources/views/products/index.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Data Products - SantriKoding.com</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body style="background: lightgray">

    <div class="container mt-5">
        <div class="row">
            <div class="col-md-12">
                <div>
                    <h3 class="text-center my-4">Tutorial Laravel 12 untuk Pemula</h3>
                    <h5 class="text-center"><a href="https://santrikoding.com">www.santrikoding.com</a></h5>
                    <hr>
                </div>
                <div class="card border-0 shadow-sm rounded">
                    <div class="card-body">
                        <a href="{{ route('products.create') }}" class="btn btn-md btn-success mb-3">ADD PRODUCT</a>
                        <table class="table table-bordered">
                            <thead>
                                <tr>
                                    <th scope="col">IMAGE</th>
                                    <th scope="col">TITLE</th>
                                    <th scope="col">PRICE</th>
                                    <th scope="col">STOCK</th>
                                    <th scope="col" style="width: 20%">ACTIONS</th>
                                </tr>
                            </thead>
                            <tbody>
                                @forelse ($products as $product)
                                    <tr>
                                        <td class="text-center">
                                            <img src="{{ asset('/storage/products/'.$product->image) }}" class="rounded" style="width: 150px">
                                        </td>
                                        <td>{{ $product->title }}</td>
                                        <td>{{ "Rp " . number_format($product->price,2,',','.') }}</td>
                                        <td>{{ $product->stock }}</td>
                                        <td class="text-center">
                                            <form onsubmit="return confirm('Apakah Anda Yakin ?');" action="{{ route('products.destroy', $product->id) }}" method="POST">
                                                <a href="{{ route('products.show', $product->id) }}" class="btn btn-sm btn-dark">SHOW</a>
                                                <a href="{{ route('products.edit', $product->id) }}" class="btn btn-sm btn-primary">EDIT</a>
                                                @csrf
                                                @method('DELETE')
                                                <button type="submit" class="btn btn-sm btn-danger">HAPUS</button>
                                            </form>
                                        </td>
                                    </tr>
                                @empty
                                    <div class="alert alert-danger">
                                        Data Products belum ada.
                                    </div>
                                @endforelse
                            </tbody>
                        </table>
                        {{ $products->links() }}
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

    <script>
        //message with sweetalert
        @if(session('success'))
            Swal.fire({
                icon: "success",
                title: "BERHASIL",
                text: "{{ session('success') }}",
                showConfirmButton: false,
                timer: 2000
            });
        @elseif(session('error'))
            Swal.fire({
                icon: "error",
                title: "GAGAL!",
                text: "{{ session('error') }}",
                showConfirmButton: false,
                timer: 2000
            });
        @endif

    </script>

</body>
</html>

Dari penambahan kode di atas, kita menambahkan CDN untuk CSS Bootstrap. Ini bertujuan untuk mempermudah kita dalam pembuatan sebuah user interface.

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">

Kemudian kita melakukan perulangan menggunakan direktif @forelse.

@forelse ($products as $product)
	
	//tampilkan data product.
	
@empty

	// data produk belum ada.

@endforelse

Dan untuk menampilkan pagination, kita bisa menggunakan links.

{{ $products->links() }}

Kemudian kita menambahkan kode untuk notifikasi menggunakan library Sweet Alert.

<script>
    @if(session('success'))
        Swal.fire({
            icon: "success",
            title: "BERHASIL",
            text: "{{ session('success') }}",
            showConfirmButton: false,
            timer: 2000
        });
    @elseif(session('error'))
        Swal.fire({
            icon: "error",
            title: "GAGAL!",
            text: "{{ session('error') }}",
            showConfirmButton: false,
            timer: 2000
        });
    @endif
</script>

Langkah 4 - Uji Coba Menampilkan Data

Setelah semua berhasil dibuat, maka sekarang kita akan lakukan uji coba untuk menampilkan data-nya.

Silahkan teman-teman buka URL berikut ini http://localhost:8000/products. Jika berhasil maka kurang lebih hasilnya seperti berikut ini.

Di atas, muncul pesan Data products belum ada. karena di database memang masih belum ada data-nya.

Kesimpulan

Pada artikel ini, kita semua telah belajar banyak hal, seperti membuat controller, route dan view untuk menampilkan data products dari database ke pengguna melalui view.

Pada artikel berikutnya, kita semua akan belajar bagaimana cara membuat proses insert data ke dalam database di Laravel 12.

Terima Kasih


Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami