ホームページ >バックエンド開発 >PHPチュートリアル >[ Laravel 5.2 ドキュメント ] サービス -- ページネーション

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

WBOY
WBOYオリジナル
2016-06-20 12:37:48808ブラウズ

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 までご連絡ください。