Tutorial Laravel Livewire 3 : #4 Menampilkan Data dari Database


Tutorial Laravel Livewire 3 : #4 Menampilkan Data dari Database

Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan belajar bagaimana cara menampilkan data di Laravel menggunakan Livewire 3. Karena menggunakan Livewire, maka kita sudah tidak butuh lagi yang namanya controller, karena semuanya akan kita buat dengan component class dari Livewire.

Langkah 1 - Membuat Component Posts Index

Silahkan teman-teman jalankan perintah berikut ini di dalam terminal/CMD dan pastikan sudah berada di dalam project Laravel-nya.

php artisan make:livewire posts.index

Jika perintah di atas berhasil dijalankan, maka kita akan mendapatkan component baru yang berada di dalam folder /app/Livewire/Posts/Index.php.

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

<?php

namespace App\Livewire\Posts;

use App\Models\Post;
use Livewire\Component;
use Livewire\WithPagination;

class Index extends Component
{
    use WithPagination;

    public function render()
    {
        return view('livewire.posts.index', [
            'posts' => Post::latest()->paginate(5)
        ]);
    }
}

Dari perubahan kode di atas, pertama kita import Model Post.

use App\Models\Post;

Karena akan membuat sebuah pagination, maka kita import WithPagination dari Livewire.

use Livewire\WithPagination;

Agar bisa digunakan, maka kita perlu memanggilnya di dalam class menggunakan keyword use.

use WithPagination;

Di dalam method render, kita menambahkan sebuah data yang bernama posts dan isinya adalah Model Post dengan pagination.

'posts' => Post::latest()->paginate(5)

Langkah 2 - Menampilkan Data di View

Setelah data berhasil diparsing dari component, maka kita tinggal menampilkan data-nya saja pada halaman view. Silahkan teman-teman buka file resources/views/livewire/posts/index.blade.php, kemudian ubah semua kode-nya menjadi seperti berikut ini.

@section('title')
Data Posts - Belajar Livewire 3 di SantriKoding.com
@endsection

<div class="container mt-5 mb-5">
    <div class="row">
        <div class="col-md-12">

            <!-- flash message -->
            @if (session()->has('message'))
            <div class="alert alert-success">
                {{ session('message') }}
            </div>
            @endif
            <!-- end flash message -->

            <a href="/create" wire:navigate class="btn btn-md btn-success rounded shadow-sm border-0 mb-3">ADD NEW POST</a>
            <div class="card border-0 rounded shadow-sm">
                <div class="card-body">
                    <table class="table table-bordered">
                        <thead class="bg-dark text-white">
                            <tr>
                                <th scope="col">Image</th>
                                <th scope="col">Title</th>
                                <th scope="col">Content</th>
                                <th scope="col" style="width: 15%">Actions</th>
                            </tr>
                        </thead>
                        <tbody>
                            @forelse ($posts as $post)
                            <tr>
                                <td class="text-center">
                                    <img src="{{ asset('/storage/posts/'.$post->image) }}" class="rounded" style="width: 150px">
                                </td>
                                <td>{{ $post->title }}</td>
                                <td>{!! $post->content !!}</td>
                                <td class="text-center">
                                    <a href="/edit/{{ $post->id }}" wire:navigate class="btn btn-sm btn-primary">EDIT</a>
                                    <button class="btn btn-sm btn-danger">DELETE</button>
                                </td>
                            </tr>
                            @empty
                            <div class="alert alert-danger">
                                Data Post belum Tersedia.
                            </div>
                            @endforelse
                        </tbody>
                    </table>
                    {{ $posts->links('vendor.pagination.bootstrap-5') }}
                </div>
            </div>
        </div>
    </div>
</div>

Dari perubahan kode di atas, pertama kita atur dulu title untuk halaman menggunakan section.

@section('title')
	Data Posts - Belajar Livewire 3 di SantriKoding.com
@endsection

Kemudian kita juga menambahkan sebuah kondisi yang nanti digunakan untuk menampilkan session flash.

 <!-- flash message -->
     @if (session()->has('message'))
         <div class="alert alert-success">
            {{ session('message') }}
         </div>
     @endif
 <!-- end flash message -->

Dan untuk menampilkan data, sama seperti Laravel pada umumnya, dan disini kita akan menggunakan direktif @forelse.

@forelse ($posts as $post)

	//tampilkan data.

@empty

	// Data Posts belum Tersedia.

@endforelse

Dan karena menggunakan paginate, maka kita tinggal memanggil method links untuk menampilkan pagination.

{{ $posts->links('vendor.pagination.bootstrap-5') }}

Di atas, kita custom UI dari pagination menggunakan Bootstrap 5, oleh sebab itu, kita harus melakukan publish view-nya terlebih dahulu.

Silahkan teman-teman jalankan perintah berikut ini di dalam terminal/CMD dan pastikan sudah berada di dalam project Laravel-nya.

php artisan vendor:publish --tag=laravel-pagination

Jika berhasil, maka kita akan mendapatkan UI pagination dari berbagai macam framework CSS, seperti Tailwind, Bootstrap 4, Bootstrap 5, Semantic UI dan lain sebagainya. Teman-teman bisa melihatnya di dalam folder resources/views/vendor/pagination.

Langkah 3 - Membuat Route

Agar component Livewire bisa diakses melalui web browser, maka kita perlu membuatkan sebuah route. Silahkan teman-teman buka file routes/web.php, kemudian ubah semua kode-nya menjadi seperti berikut ini.

<?php

use Illuminate\Support\Facades\Route;

//posts index
Route::get('/', App\Livewire\Posts\Index::class)->name('posts.index');

Di atas, kita membuat route dengan path / dan kita arahkan ke class component posts index dan kita juga berikan nama untuk route di atas adalah posts.index.

Langkah 4 - Uji Coba Menampilkan Data

Sekarang silahkan teman-teman buka project-nya di http://localhost:8000, jika berhasil maka akan menampilkan hasil seperti berikut ini.

Di atas, keluar pesan Data Posts belum Tersedia., karena memang di dalam database kita belum memiliki data apapun.

Kesimpulan

Pada artikel ini kita semua telah belajar bagaimana cara membuat sebuah class component di dalam Livewire dan belajar menampilkan data pada halaman view dan membuat route untuk menampilkan halaman.

Pada artikel selanjutnya kita semua akan belajar bagaimana cara melakukan proses insert data ke dalam database menggunakan Livewire.

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