PHP一覧

Laravel8でページネーション(Pagination)を実装する方法

Laravelをしようしていてページネーションを実装する機会というのは多いと思います。
今回の記事では、Laravel8をしようした際のページネーションの実装方法について紹介します。

コントローラーの実装

まず次のようにコントローラーを作成します。今回は、Usersテーブルの情報を5件づつページングする処理を作成します。

<?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\Models\User;
  
class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $data = User::paginate(5);
        return view('users',compact('data'));
    }
}

bladeの実装

次にbladeの作成します。今回の例では下記のように作成しました。

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 8 CRUD Application - ItSolutionStuff.com</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.css" rel="stylesheet">
</head>
<body>
    
<div class="container">
    <h1>Laravel 8 Pagination Example - ItSolutionStuff.com</h1>
    <table class="table table-bordered">
        <thead>
            <tr>
                <th>Name</th>
                <th width="300px;">Action</th>
            </tr>
        </thead>
        <tbody>
            @if(!empty($data) && $data->count())
                @foreach($data as $key => $value)
                    <tr>
                        <td>{{ $value->name }}</td>
                        <td>
                            <button class="btn btn-danger">Delete</button>
                        </td>
                    </tr>
                @endforeach
            @else
                <tr>
                    <td colspan="10">There are no data.</td>
                </tr>
            @endif
        </tbody>
    </table>
         
    {!! $data->links() !!}
</div>
     
</body>
</html>

bladeに受け渡された変数を

{!! $data->links() !!}

とすることでページングのリンクが作成されます。
おそらく、少なくともLaravel5.3以上はこのやり方でページングの処理が実装できるはずです。

他のCSSの表示を変更したい場合は、下記のartisanコマンドを打ってください。

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

resources/views/vendor/paginationができます。
そのなかにpagination用のファイルが入っています。

Bootstrapのデザインを適用したい場合(Laravel8)

Bootstrapを使用している場合、以下のようにServiceProviderにuseBootstrap()を追加すると実装できます。

app\Providers\AppServiceProvider.php

<?php
  
namespace App\Providers;
  
use Illuminate\Support\ServiceProvider;
// ↓これを忘れないように
use Illuminate\Pagination\Paginator;
  
class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
    
    }
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
     //↓追加
        Paginator::useBootstrap();
    }
}

まとめ

今回の記事では、Laravelを用いたページングの処理について紹介しました。Laravelを用いてページングの処理を実装する際には参考にしてみてください。