Cara Mudah Membuat Fitur Pagination di Laravel 7 – Laravel #5

Pada saat membangun sebuah projek website kita membutuhkan fitur pagination agar data yang ditampilkan tidak sekaligus di muat secara langsung pada satu halaman. Hal ini dapat membuat halaman membutuhkan waktu yang lama untuk dimuat karena banyaknya data. Atau bahkan merusak User Interface karena terlihat tidak rapi dan berantakan. Maka dari itu ketika membangun sebuah proyek yang menampilkan puluhan, ratusan bahkan ribuan data sebaiknya kita menggunakan fitur pagination. Berikut cara mudah membuat pagination di laravel 7 :

a. Edit ENV.

Atur environment seperti berikut ini :

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=binerian (sesuaikan dengan nama database)
DB_USERNAME=root (sesuaikan)
DB_PASSWORD= (sesuaikan)

b. Membuat Controller

Membuat controller untuk data books dengan menggunakan perintah

php artisan make:controller BooksController -r

Gunakan -r (resources) agar controller yang dibuat secara default membuat function untuk resource (store, show, create, update, delete, index, edit). Agar lebih mudah silahkan salin kode dibawah ini kedalam file BooksController.php

<?php

namespace App\Http\Controllers;

use App\Book;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class BooksController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $books = DB::table('books')->paginate(3);
        return view('/index', compact('books'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

penjelasan script : didalam function index kita menambahkan script seperti ini

$books = DB::table(‘books’)->paginate(3);

ini berarti variabel books berguna untuk memanggil seluruh data/query dari tabel books di dalam database kemudian ditampilkan dengan paginate dimana dalam satu page terdapat 3 data. Kamu bisa mengganti angka 3 sesuai yang kamu butuhkan. Jika dikosongkan seperti ini “paginate()” maka data per halaman akan ditampilkan secara default yaitu sebanyak 15 data perhalaman

c. Membuat Model

Dengan menggunakan perintah

php artisan make:model Book -m

-m berguna agar artisan langsung membuat model sekaligus dengan migration create tabel. Lihat pada gambar diatas.

Untuk source code pada model Book.php kamu bisa membiarkannya secara default saja sesuai dengan yang dibuatkan oleh artisan atau bisa mengikuti source code dibawah ini

namespace App;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    protected $fillable = [
        'judul', 'kode'
     ];
}

d. Membuat Tabel

Sebagai contoh disini kita akan membuat tabel daftar buku, sebelum membuat tabel pastikan database sudah tersedia sesuai dengan nama yang di cantumkan pada env. (environment). Masuk ke folder database>migration>..create_books_table. Kemudian copy kan script dibawah ini. Jika sudah selanjutnya jalankan perintah

php artisan migrate

perintah ini digunakan agar tabel dapat dibuat ke dalam database

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateBooksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->id();
            $table->string('judul');
            $table->string('kode');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('books');
    }
}

e. Add Query Table

Tambahkan beberapa query pada tabel seperti dibawah ini .Kamu bisa menyalin script kode dibawah ini secara langsung ke sql pada phpmyadmin kemudian menjalankannya. Atau bisa menggunakan fitur seed pada laravel agar lebih mudah.

INSERT INTO `books` (`id`, `judul`, `kode`, `created_at`, `updated_at`) VALUES (NULL, 'Algoritma dan penerapan', 'ALGO', CURRENT_DATE(), CURRENT_DATE()), (NULL, 'MATEMATIKA DISKRIT', 'MTK', CURRENT_DATE(), CURRENT_DATE()), (NULL, 'WEB PROGRAMMING', 'WEB', CURRENT_DATE(), CURRENT_DATE()), (NULL, 'BELAJAR LARAVEL', 'WEB', CURRENT_DATE(), CURRENT_DATE());

f. membuat view

Buat sebuah file di dalam folder resources/views dengan nama index.blade.php. Kemudian salin kode dibawah ini

<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
  <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">

      <!-- CSRF Token -->
      <meta name="csrf-token" content="{{ csrf_token() }}">

      {{-- <title>{{ config('app.name', 'JGX') }}</title> --}}
      <title>HOME | BOOKS</title>
      <!-- Scripts -->
      <script src="{{ asset('js/app .js') }}" defer></script>

      <!-- Fonts -->
      <link rel="dns-prefetch" href="//fonts.gstatic.com">
      <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">

      <!-- Styles -->
      <link href="{{ asset('css/app.css') }}" rel="stylesheet">
  </head>
  <body>
    <div id="app">
      <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
        <div class="container">
          <a class="navbar-brand" href="{{ url('/') }}">BOOKS STORE</a>
          <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
            <span class="navbar-toggler-icon"></span>
          </button>
        </div>
      </nav>
      <main class="py-4">    
      {{-- form --}}
        <div class="container">
          <h3>Daftar Paket</h3>
          <a href="#" class="btn btn-primary my-3">Tambah Baru</a>
          <table class="table table-hover mt-3">
            <thead>
              <tr>
                <th scope="col">No</th>
                <th scope="col">Judul</th>
                <th scope="col">Kode</th>
                <th scope="col">Aksi</th>
              </tr>
            </thead>
            <tbody>
              @foreach ($books as $bk)
                <tr>
                <th scope="row">{{$loop->iteration}}</th>
                  <td>{{ $bk->judul}}</td>
                  <td>{{ $bk->kode}}</td>
                  <td><a href="#" class="badge badge-warning">detail</a></td>
                </tr>
              @endforeach
            </tbody>
          </table>
          <h6>Jumlah Data : {{ $books->total()}} </h6>
          {{ $books->links() }}
        </div>
      </main>
    </div>
  </body>
</html>

 penjelasan script :

<h6>Jumlah Data : {{ $books->total()}} </h6>
          {{ $books->links() }}

 dapat kita lihat pada baris pertama merupakan kode untuk menampilkan total jumlah data, kemudian pada baris kedua merupakan kode untuk menampilkan fitur pagination pada laravel. Simpel bukan?

g. Membuat Route

Tambahkan script dibawah ini pada file routes/web.php

Route::get(‘/books’,’BooksController@index’);

h. Hasil

Untuk melihat hasil tampilannya, silahkan jalankan development server laravel menggunakan terminal

php artisan serve

kemudian copy link ini http://127.0.0.1:8000/books .maka tampilannya akan seperti gambar berikut ini..

Jika css atau tampilan nya berbeda kemungkinan kamu belum menambahkan ui bootstrap pada projek mu. Baca blog sebelumnya Cara Install Bootstrap di laravel 7 – Laravel #4 untuk menambahkan ui boootstrap pada projek laravelmu.

Sekian, jika ada yang ingin ditanyakan silahkan tinggalkan dikolom komentar. Semoga tulisan ini bermanfaat buat kamu yang sedang belajar laravel 😀

Leave a Reply