Cara membuat pagination pada aplikasi Laravel

December 14, 2018

Dalam mebuat sebuah aplikasi web sudah pasti kita berurusan dengan database. Nah dalam urusan pengolahan data ada salah satu operasi yang sudah pasti dilakukan oleh seorang backend developer, yaitu menampilkan data.

Menampilkan data pada dasarnya cukup mudah, hanya saja jika kita berurusan dengan data yang dengan jumlah yang besar, kita perlu menampilkan data dengan cara di potong menjadi beberapa bagian.

Metode yang di lakukan untuk memotong data ini disebut dengan pagination, jadi misalkan kita memiliki sebuah data user dengan total 50 data kemudian kita paging menjadi 10 data perpage nya maka itu artinya kita memotong data menjadi 5 bagian.

Kabar baiknya di laravel ada sebuag fitur bawaan yang bisa kita gunakan untuk mengimplementasikan metode pagination ini. Ikuti langkah - langkah berikut ini.

Buat Database

Karena di laravel sudah ada satu model bawaan untuk menyimpan data user, maka kita akan gunakan model user. Akan tetapi disini kita akan menambahkan sedikit data, buat model baru seperti berikut ini.

php artisan make:model Profile -m

Kita akan mencoba untuk membuat data profile pelengkap data dari model User. Jadi profile ini berelasi dengan user.

Schema::create('profiles', function (Blueprint $table) {
      $table->increments('id');
      $table->unsignedInteger('user_id');
      $table->foreign('user_id')->references('id')->on('users');
      $table->string('phone_number');
      $table->string('gender');
      $table->string('birth_day');
      $table->string('address');
      $table->timestamps();
});

Sekarang jalankan migrasi database dengan mengeksekusi perintah migration dengan php artisan.

php artisan make:model Profile -m

Buat Seeder

Selanjutnya kita buat generator untuk data dummy, atau data percobaan user. Untuk itu kita akan buat fungsi generator ini pada class DatabaseSeeder.

factory(App\User::class, 50)->create()->each(function ($user) use ($faker) {
          $profile = new \App\Profile;
          $profile->user_id = $user->id;
          $profile->phone_number = $faker->phoneNumber;
          $profile->gender = is_float(rand() / 2) ? "Male" : "Female";
          $profile->birth_day = $faker->dateTimeBetween($startDate = '-50 years', $endDate = 'now', $timezone = "Asia/Jakarta");
          $profile->address = $faker->address;
          $profile->save();
});

Sekarang generate data dummy melalui generator yang sudah kita buat dengan menajalankan pertinah berikut ini.

php artisan db:seed

Membuat Pagination

Nah sekarang kita masuk pada inti pembahasan tutorial kali ini yaitu membuat pagination.

Pertama kita buat html untuk menampilkan data seperti berikut ini, disini kita akan menampilkan array data user.

<div class="container">
  <div class="row">
    <div class="col-md-4">
       <h2>Users</h2>
    </div>
    <div class="col-md-8">
      <form class="form-inline float-right">
        <div class="form-group" style="padding-right: 20px">
          <select name="gender" class="form-control">
            @if(request('gender'))
              @if(request('gender') == "Female")
              <option value="Female">Female</option>
              <option value="Male">Male</option>
              @else
              <option value="Male">Male</option>
              <option value="Female">Female</option>
              @endif
            @else
            <option value="Male">Male</option>
            <option value="Female">Female</option>
            @endif
          </select>
        </div>
        <button type="submit" class="btn btn-primary">Filter</button>
      </form>
    </div>
  </div>

  <div class="card">     <table class="table table-inverse">       <thead>         <tr>           <th>ID</th>           <th>Name</th>           <th>Email</th>           <th>Gender</th>           <th>Date</th>         </tr>       </thead>       <tbody>         @foreach($users as $user)         <tr>           <td>{{$user->id}}</td>           <td>{{$user->name}}</td>           <td>{{$user->email}}</td>           <td>{{$user->profile->gender}}</td>           <td>{{$user->created_at}}</td>         </tr>         @endforeach       </tbody>     </table>   </div>   <br>   {{ $users->links() }} </div>

Cara pertama yang paling simple adalah seperti berikut ini untuk menampilkan user dengan pagination.

public function index()
  {
    return view('users', [
      'users' => User::paginate(10)
    ]);
}

Dengan kode di atas kita menampilkan user berdasarkan pagination yang setiap datanya ditampilkan 10 data. Maka hasilnya adalah seperti ini.

undefined

Link generator itu digenerate dengan fungsi eloquent yang kita jalankan pada view blade yaitu seperti ini.

  {{ $users->links() }}

Cukup mudah bukan. Ok selanjutnya kita tambahkan fungsi untuk memfilter data berdasarkan gender.

public function index()
  {
    $users = User::query();
    if (request('gender')) {
      $users->whereDoesntHave('profile', function($query) {
        $query->where('gender', '!=', request('gender'));
      });
    }

    return view('welcome', [       'users' => $users->paginate(10)     ]);   }

Dengan tambahan code di atas kita bisa menampilkan data user dengan filter gender. Akan tetapi hal ini akan menjadi masalah ketika kita melakukan pagination.

Jika kita lakukan klik untuk page ke page 2 maka url yang di akses adalah seperti berikut ini.

http://laravel-pagination-example.test/?page=2

Sedangkan url yang seharusnya muncul adalah seperti berkut ini, karena kita melakukan filter berdasarkan gender.

http://laravel-pagination-example.test/?gender=Female?page=2

Nah untuk itu kita bisa lakukan hal berikut ini untuk menambahkan parameter url pada pagination generatornya.

Untuk itu kita bisa melakukan append parameter url seperti berikut ini pada view blade nya.

  {{ $users->appends(['gender'=>request('gender')])->links() }}

Nah sekarang sudah bisa tampil untuk append parameter url untuk paginationya.

Ok mudah - mudahan artikel ini bisa membantu kamu untuk mempelajari pagination pada aplikasi web laravel.

Untuk source code dari tutorial ini bisa kamu dapatkan disini. Jangan lupa share ya artikel ini supaya temen - temen kamu bisa belajar juga.

Subscribe to My Newsletter

Thank you for your interest in my blog. Sign up to my newsletter to stay current on the latest news and information me and to be the first to see new blog posts.