目次
1. はじめに
2. 基本的な使用法
クエリビルダーまたは Eloquent クエリで paginate または simplePaginate メソッドを呼び出すと、ページネーターの例が表示されます。 paginate メソッドを呼び出すと、IlluminatePaginationLengthAwarePaginator が取得され、simplePaginate メソッドを呼び出すと、IlluminatePaginationPaginator インスタンスが取得されます。これらのオブジェクトは、これらの結果セットを記述するための関連メソッドを提供します。これらのヘルパー関数に加えて、ページャー インスタンス自体も反復子であり、配列のようにループ内で呼び出すことができます。 結果を取得した後、Blade を使用してこれらの結果を表示し、次のようにページ リンクをレンダリングできます。
4、将结果转化为JSON
ホームページ バックエンド開発 PHPチュートリアル [ Laravel 5.2 ドキュメント ] サービス -- ページネーション

[ Laravel 5.2 ドキュメント ] サービス -- ページネーション

Jun 20, 2016 pm 12:37 PM

1. はじめに

他のフレームワークではページネーションは非常に面倒なものですが、Laravel ではそれが簡単に行えます。 Laravel は、現在のページに基づいて特定範囲のリンクをインテリジェントに生成でき、生成された HTML は Bootstrap CSS フレームワークと互換性があります。

2. 基本的な使用法

2.1 クエリビルダーに基づくページネーション

ページングを実装するにはさまざまな方法がありますが、最も簡単な方法はクエリを使用することです。 builder または Eloquent モデルの paginate メソッド。このメソッドは、ユーザーが現在表示しているページに基づいて、適切なオフセットと制限を自動的に設定します。デフォルトでは、現在のページは HTTP リクエストのクエリ文字列パラメータ ?page の値によって決まります。もちろん、この値は Laravel によって自動的に検出され、ページネーターによって生成されたリンクに自動的に挿入されます。

まず、クエリで paginate メソッドを呼び出す方法を見てみましょう。この例では、paginate に渡される唯一のパラメータは、ページごとに表示する数値です。 ここでは、ページごとに 15 を指定します。 Laravel によって効果的に実行されます。ページ分割された結果で groupBy を使用する必要がある場合は、データベースに手動でクエリを実行してページネーターを作成することをお勧めします。

<?phpnamespace App\Http\Controllers;use DB;use App\Http\Controllers\Controller;class UserController extends Controller{    /**     * 显示应用中的所有用户     *     * @return Response     */    public function index()    {        $users = DB::table('users')->paginate(15);        return view('user.index', ['users' => $users]);    }}
ログイン後にコピー

単純なページネーション

ページ分割されたビューで「次」と「前」のリンクを表示するだけの場合は、simplePaginate メソッドを使用してクエリを実行できます。大規模なデータセットを含むビューをレンダリングする場合に非常に便利で、各ページ番号を表示する必要はありません:

2.2 Eloquent モデルに基づくページネーション

Eloquent クエリ結果をページネーションすることもできます。この例では、User モデルをページ分割し、各ページに 15 件のレコードを表示します。ご覧のとおり、構文はクエリ ビルダー ベースのページネーションに似ています:
$users = DB::table('users')->simplePaginate(15);
ログイン後にコピー

もちろん、where 句などの他の制約を設定した後に paginate を呼び出すこともできます:

$users = App\User::paginate(15);
ログイン後にコピー
simplePaginate メソッドも使用できます。

$users = User::where('votes', '>', 100)->paginate(15);
ログイン後にコピー
2.3 ページネータを手動で作成する

配列データを渡してページネーション インスタンスを手動で作成したい場合があります。独自のニーズは、IlluminatePaginationPaginator または IlluminatePaginationLengthAwarePaginator インスタンスを作成することで実現されます。
$users = User::where('votes', '>', 100)->simplePaginate(15);
ログイン後にコピー

Paginator クラスは結果セット内のデータ項目の総数を知る必要はありません。このため、このクラスは最後のページのインデックスを取得するメソッドを提供しません。

LengthAwarePaginator は、結果セットの総数を渡す必要があることを除いて、Paginator とほぼ同じパラメーターを受け取ります。

つまり、Paginator は simplePaginate メソッドに相当し、LengthAwarePaginator は paginate メソッドに相当します。

ページャー インスタンスを手動で作成する場合は、ページャーに渡される結果セットを手動で「スライス」する必要があります。これを行う方法がわからない場合は、PHP 関数 array_slice を確認してください。

3. ページネーションの結果をビューに表示します

クエリビルダーまたは Eloquent クエリで paginate または simplePaginate メソッドを呼び出すと、ページネーターの例が表示されます。 paginate メソッドを呼び出すと、IlluminatePaginationLengthAwarePaginator が取得され、simplePaginate メソッドを呼び出すと、IlluminatePaginationPaginator インスタンスが取得されます。これらのオブジェクトは、これらの結果セットを記述するための関連メソッドを提供します。これらのヘルパー関数に加えて、ページャー インスタンス自体も反復子であり、配列のようにループ内で呼び出すことができます。 結果を取得した後、Blade を使用してこれらの結果を表示し、次のようにページ リンクをレンダリングできます。

links メソッドは、結果セット内の他のページ リンクをレンダリングします。各リンクには、?page クエリ文字列変数がすでに含まれています。 render メソッドによって生成された HTML は、Bootstrap CSS フレームワークと互換性があることに注意してください。

<div class="container">    @foreach ($users as $user)        {{ $user->name }}    @endforeach</div>{!! $users->links() !!}
ログイン後にコピー
注: Blade テンプレートから render メソッドを呼び出すときは、HTML リンクがフィルタリングされないように、必ず {!! !!} 構文を使用してください。

カスタム ページネーション リンク

たとえば、ページネーション リンクを生成するときに、ページネーションで使用される URI をカスタマイズできます。 :// example.com/custom/url?page=N のようなリンクの場合、custom/url を setPath メソッドに渡す必要があります:

ページング リンクにパラメータを追加します

appends メソッドを使用して、ページネーション リンク クエリ文字列にクエリ パラメータを追加できます。たとえば、&sort=votes を各ページング リンクに追加するには、次のように appends を呼び出します。
Route::get('users', function () {    $users = App\User::paginate(15);    $users->setPath('custom/url');    //});
ログイン後にコピー

ページング リンクに「ハッシュ フラグメント」を追加したい場合は、フラグメント メソッドを使用できます。たとえば、各ページネーション リンクの末尾に #foo を追加するには、次のようにフラグメント メソッドを呼び出します。

{!! $users->appends(['sort' => 'votes'])->links() !!}
ログイン後にコピー
その他のヘルパー メソッド

ページネーターで次のメソッドを渡すこともできます。インスタンス 詳細なページネーション情報にアクセスします:
{!! $users->fragment('foo')->links() !!}
ログイン後にコピー
  • $results->count()
  • $results->currentPage()
  • $results->firstItem()
  • $results->hasMorePages()
  • $results->lastItem()
  • $results->lastPage() (使用simplePaginate时无效)
  • $results->nextPageUrl()
  • $results->perPage()
  • $results->previousPageUrl()
  • $results->total() (使用simplePaginate时无效)
  • $results->url($page)

4、将结果转化为JSON

Laravel分页器结果类实现了 Illuminate\Contracts\Support\JsonableInterface契约并实现 toJson方法,所以将分页结果转化为JSON非常简单。

你还可以简单通过从路由或控制器动作返回分页器实例将转其化为JSON:

Route::get('users', function () {    return App\User::paginate();});
ログイン後にコピー

从分页器转化来的JSON包含了元信息如 total, current_page, last_page等等,实际的结果对象数据可以通过该JSON数组中的 data键访问。下面是一个通过从路由返回的分页器实例创建的JSON例子:

{   "total": 50,   "per_page": 15,   "current_page": 1,   "last_page": 4,   "next_page_url": "http://laravel.app?page=2",   "prev_page_url": null,   "from": 1,   "to": 15,   "data":[        {            // Result Object        },        {            // Result Object        }   ]}
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP状況調査の発表

See all articles