Tutorial Laravel 10 #6 : Menampilkan Detail Data By ID


Tutorial Laravel 10 #6 : Menampilkan Detail Data By ID

Halo teman-teman semuanya, pada artikel kali ini kita semua akan belajar bagaimana cara menampilkan data dari database berdasarkan ID atau menampilkan detail data di Laravel.

Langkah 1 - Menambahkan Method Show

Hal pertama yang harus kita lakukan adalah menambahkan method baru di dalam controller, method ini nanti kita gunakan untuk mencari data berdasarkan ID.

Silahkan teman-teman buka file app/Http/Controllers/PostController.php, kemudian ubah semua kode-nya menjadi seperti berikut ini.

app/Http/Controllers/PostController.php

<?php

namespace App\Http\Controllers;

//import Model "Post
use App\Models\Post;

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

//return type redirectResponse
use Illuminate\Http\RedirectResponse;

use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * index
     *
     * @return void
     */
    public function index(): View
    {
        //get posts
        $posts = Post::latest()->paginate(5);

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

    /**
     * create
     *
     * @return void
     */
    public function create(): View
    {
        return view('posts.create');
    }

    /**
     * store
     *
     * @param  mixed $request
     * @return RedirectResponse
     */
    public function store(Request $request): RedirectResponse
    {
        //validate form
        $this->validate($request, [
            'image'     => 'required|image|mimes:jpeg,jpg,png|max:2048',
            'title'     => 'required|min:5',
            'content'   => 'required|min:10'
        ]);

        //upload image
        $image = $request->file('image');
        $image->storeAs('public/posts', $image->hashName());

        //create post
        Post::create([
            'image'     => $image->hashName(),
            'title'     => $request->title,
            'content'   => $request->content
        ]);

        //redirect to index
        return redirect()->route('posts.index')->with(['success' => 'Data Berhasil Disimpan!']);
    }
    
    /**
     * show
     *
     * @param  mixed $id
     * @return View
     */
    public function show(string $id): View
    {
        //get post by ID
        $post = Post::findOrFail($id);

        //render view with post
        return view('posts.show', compact('post'));
    }
}

Dari penambahan kode di atas, kita menambahkan method baru dengan nama show dan di dalamnya kita berikan parameter $id. Parameter tersebut akan bernilai dinamis, yaitu sesuai ID data yang dipanggil.

public function show(string $id): View
{

	//...
	
}

Di dalam method di atas, kita melakukan get data post berdasarkan variable $id yang ada di dalam parameter.

//get post by ID
$post = Post::findOrFail($id);

Jika data berhasil ditemukan, maka kita akan kirimkan ke dalam view menggunakan fungsi compact.

//render view with post
return view('posts.show', compact('post'));

Langkah 2 - Membuat View Detail Post

Sekarang kita lanjutkan belajar menampilkan data yang dikirimkan oleh controller di dalam view. Silahkan teman-teman buat file baru dengan nama show.blade.php di dalam folder resources/views/posts, kemudian masukkan kode berikut ini di dalamnya.

resources/views/posts/show.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>Detail Data Post - SantriKoding.com</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body style="background: lightgray">

    <div class="container mt-5 mb-5">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card border-0 shadow-sm rounded">
                    <div class="card-body">
                        <img src="{{ asset('storage/posts/'.$post->image) }}" class="w-100 rounded">
                        <hr>
                        <h4>{{ $post->title }}</h4>
                        <p class="tmt-3">
                            {!! $post->content !!}
                        </p>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>

Karena data yang dikirimkan oleh controller dalam bentuk object, maka kita tinggal memanggil nama field-nya saja.

Contohnya, untuk memanggil gambar kita bisa seperti ini.

<img src="{{ asset('storage/posts/'.$post->image) }}" class="w-100 rounded">

Atau untuk memanggil title kita bisa menggunakan kode seperti berikut ini.

<h4>{{ $post->title }}</h4>

Dan terakhir, untuk content karena isinya mengandung sintaks HTML, maka kita perlu menampilkannya dengan sintaks kusus, yaitu seperti berikut ini.

{!! $post->content !!}

Langkah 3 - Uji Coba Menampilkan Detail Data Post

Silahkan teman-teman klik button SHOW di salah satu data yang ada pada halaman posts index, jika berhasil, maka akan menampilkan hasil seperti berikut ini.

Sampai disini pembahasan bagaimana cara menampilkan data berdasarkan ID di dalam Laravel, untuk artikel berikutnya kita bersama-sama akan belajar bagaimana cara membuat proses edit dan juga update ke dalam database di Laravel.

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