データベース: ページネーション
はじめに
他のフレームワークでは、ペ ージネーションは非常に面倒です。Laravelのページネーションアプローチが新鮮な風をもたらすことを願っています。Laravelのページネータは、クエリビルダとEloquent ORMと統合されており、ゼロ構成でデータベースレコードの便利で使いやすいページネーションを提供します。
デフォルトでは、ページネータによって生成されるHTMLはTailwind CSSフレームワークと互換性があります。ただし、Bootstrapのページネーションサポートも利用可能です。
Tailwind JIT
LaravelのデフォルトのTailwindページネーションビューとTailwind JITエンジンを使用している場合は、アプリケーションの tailwind.config.js
ファイルの content
キーがLaravelのページネーションビューを参照するようにして、Tailwindクラスがパージされないようにする必要があります:
content: [
'./resources/**/*.blade.php',
'./resources/**/*.js',
'./resources/**/*.vue',
'./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
],
基本的な使用法
クエリビルダの結果をページネートする
アイテムをページネートする方法はいくつかあります。最も簡単な方法は、クエリビルダまたはEloquentクエリで paginate
メソッドを使用することです。 paginate
メソッドは、ユーザーが表示している現在のページに基づいてクエリの "limit" と "offset" を自動的に設定します。デフォルトでは、現在のページはHTTPリクエストの page
クエリ文字列引数の値によって検出されます。この値はLaravelによって自動的に検出され、またページネータによって生成されるリンクにも自動的に挿入されます。
この例では、paginate
メソッドに渡される唯一の引数は、1ページあたりに表示したいアイテムの数です。この場合、1ページあたりに 15
個のアイテムを表示したいと指定しましょう:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
class UserController extends Controller
{
/**
* Show all application users.
*/
public function index(): View
{
return view('user.index', [
'users' => DB::table('users')->paginate(15)
]);
}
}
シンプルなページネーション
paginate
メソッドは、データベースからレコードを取得する前にクエリにマッチする合計レコード数をカウントします。これは、ページネータが合計で何ページのレコードがあるかを知るために行われます。ただし、アプリケーションの UI に合計ページ数を表示する予定がない場合は、レコード数のクエリは不要です。
そのため、アプリケーションの UI に単純な "次へ" と "前へ" のリンクのみを表示する必要がある場合は、効率的な単一のクエリを実行するために simplePaginate
メソッドを使用できます:
$users = DB::table('users')->simplePaginate(15);
Eloquent の結果をページネーションする
Eloquent クエリにもページネーションを適用できます。この例では、App\Models\User
モデルをページネーションし、1ページあたりに 15 件のレコードを表示することを示します。クエリビルダの結果をページネーションする構文はほぼ同じであることがわかります:
use App\Models\User;
$users = User::paginate(15);
もちろん、where
句などのクエリに他の制約を設定した後に paginate
メソッドを呼び出すこともできます:
$users = User::where('votes', '>', 100)->paginate(15);
Eloquent モデルをページネーションする際にも simplePaginate
メソッドを使用できます:
$users = User::where('votes', '>', 100)->simplePaginate(15);
同様に、Eloquent モデルをカーソルページネーションする際 には cursorPaginate
メソッドを使用できます:
$users = User::where('votes', '>', 100)->cursorPaginate(15);