ページネーション


雄弁なページネーション

    ページネーションを手動で作成する
  • ページネーションされた結果を表示する
    • はじめに

      他のフレームワークでは、ページネーションが面倒になる場合があります。 Laravel のページネーションは、クエリ ビルダーと Eloquent ORM を組み合わせて、データベース結果セットの便利で使いやすいページネーションを提供します。ページネータによって生成された HTML は、Bootstrap CSS フレームワークと互換性があります。

      ##基本的な使用法

      ## クエリ ビルダーページネーション

      データをページネーションするにはいくつかの方法があります。最も簡単な方法は、クエリ ビルダーまたは Eloquent クエリの

      paginate

      メソッドを使用することです。 paginate このメソッドは、ユーザーが閲覧している現在のページ番号に基づいて、適切なオフセット offset と制限番号を自動的に設定します。デフォルトでは、HTTP リクエストの page クエリ パラメータ値は、現在のページのページ番号として扱われます。 Lavarel はこの値を自動的に検出し、ページネーターによって生成されたリンクに自動的に挿入します。 次の例では、

      paginate

      メソッドに渡される唯一のパラメータは、各ページに表示するレコードの数です。ここでは、ページごとに 15 個のデータを表示することを指定します:

      <?php
          namespace App\Http\Controllers;
          use Illuminate\Support\Facades\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]);   
            }
         }

      {note} 現在、Lavarel は
      groupBy

      ステートメント ページングを使用して効率的に実行できません。手術。 groupBy を使用して結果セットをページ分割する必要がある場合は、手動でデータベースにクエリを実行し、ページ分割を作成することをお勧めします。

      単純なページング

      ページ分割されたビューに「次のページ」と「前のページ」リンクを表示するだけの場合は、

      simplePaginate

      メソッドを使用して、より効率的なクエリを実行します。これは、大量のデータがあり、ビューのレンダリング時に各ページのページ番号を表示する必要がない場合に便利です:

      $users = DB::table('users')->simplePaginate(15);

      Eloquent ページネーション

      Eloquent クエリ結果をページネーションすることもできます。以下の例では、

      User

      モデルを 15 項目/ページごとにページ分割します。ご覧のとおり、構文は基本的にクエリ ビルダーのページネーションと同じです。

      $users = App\User::paginate(15);

      paginate

      を呼び出す前に、クエリに where などの句を設定することもできます。制約:

      $users = User::where('votes', '>', 100)->paginate(15);
      Eloquent ページングで

      simplePaginate

      メソッドを使用することもできます:

      $users = User::where('votes', '>', 100)->simplePaginate(15);

      ページネーションを手動で作成する

      ページネーションを手動で作成し、それに配列セットを渡したい場合があります。これは、ニーズに応じて、Illuminate\Pagination\Paginator または Illuminate\Pagination\LengthAwarePaginator のインスタンスを作成することで実現できます。 .

      Paginator クラスは結果セットの合計数を知る必要はありませんが、このクラスには最後のページのインデックスを知る方法がありません。 LengthAwarePaginatorPaginator とほぼ同じパラメータを受け入れますが、結果セットの総数をカウントします。

      つまり、Paginator はクエリ ビルダーまたは Eloquent の simplePaginate メソッドに相当し、LengthAwarePaginatorpaginate# に相当します。 # # 方法。

      {note} ページング インスタンスを手動で作成する場合は、ページング インスタンスに渡される結果配列を手動で「切り取る」必要があります。これについてわからない場合は、PHP の

      array_slice 関数を参照してください。

      結果セットの表示

      paginate メソッドを呼び出すと、 Illuminate\Pagination\LengthAwarePaginator インスタンスを取得します。 simplePaginate メソッドを呼び出して、Illuminate\Pagination\Paginator インスタンスを取得します。これらのオブジェクトは、結果セットを分析するためのいくつかのメソッドを提供します。これらのヘルパー メソッドに加えて、ページャー インスタンスは、配列のようにループできる反復子に結合されます。したがって、結果が取得されたら、Blade を使用してデータを表示し、ページング リンクをレンダリングできます。

      <div class="container">
          @foreach ($users as $user)       
           {{ $user->name }}
          @endforeach
         </div>
        {{ $users->links() }}

      links メソッドを使用して、結果セット内の残りのページへのリンクをレンダリングします。各リンクには、page URL 変数が含まれています。 links 生成された HTML は、Bootstrap CSS フレームワークと互換性があることに注意してください。

      カスタム ページネータ URI

      withPath メソッドを使用すると、ページネーション リンクを生成するときに URI をカスタマイズできます。たとえば、http://example.com/custom/url?page=N のようなページ分割されたリンクを生成する場合は、custom/url パラメーターを渡すだけで済みます。 to withPath メソッド:

      Route::get('users', function () {
          $users = App\User::paginate(15);    
          $users->withPath('custom/url');   
          //
        });

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

      appends メソッドを使用してクエリ パラメーターを追加できます。ページングリンクへ。たとえば、各ページ リンクに sort=votes を追加するには、appends:

      {{ $users->appends(['sort' => 'votes'])->links() }}

      を呼び出すだけです。ページネータ URL に「ハッシュ フラグメント」を追加したい場合は、 」の場合は、

      fragment メソッドを使用できます。たとえば、すべてのページのリンクに #foo を追加するには、次のように fragment メソッドを呼び出すだけです:

      {{ $users->fragment('foo')->links() }}

      ページネータ リンク ウィンドウの調整

      ページネータの「ウィンドウ」の両側に表示される追加リンクの数を制御できます。デフォルトでは、メインのページネーション リンクの両側に 3 つのリンクが表示されます。この値は、onEachSide メソッドを使用して変更できます。

      {{ $users->onEachSide(5)->links() }}

      結果を JSON

      # に変換します。 ## Laravel ページネータ クラスは、

      Illuminate\Contracts\Support\Jsonable インターフェイス コントラクトを実装し、ページング結果を JSON に簡単に変換できる toJson メソッドを提供します。ルートまたはコントローラー アクションからページネーター インスタンスを返すことによって、JSON に変換することもできます。

      Route::get('users', function () {
          return App\User::paginate();
        });

      ページネーターからの JSON には、

      totalcurrent_page のようなものが含まれます。 、last_page およびその他のメタデータ情報。実際の結果オブジェクトは、JSON 配列の data キーを介して提供されます。以下は、ルートからページネーター インスタンスを返すことによって JSON を作成する例です:

      {  
           "total": 50,   
          "per_page": 15,   
          "current_page": 1,   
          "last_page": 4,   
          "first_page_url": "http://laravel.app?page=1",   
          "last_page_url": "http://laravel.app?page=4",   
          "next_page_url": "http://laravel.app?page=2",   
          "prev_page_url": null,   
          "path": "http://laravel.app",   
          "from": 1,   "to": 15,   
          "data":[      
            {           
             // 结果集对象        
           },        
           {           
            // 结果集对象       
             }   
           ]
       }

      Custom Pagination View

      デフォルトでは、ページ分割されたリンクを表示するためのビューのレンダリングは、Bootstrap CSS フレームワークと互換性があります。 Bootstrap を使用していない場合は、独自のビューを自由にカスタマイズしてこれらのリンクをレンダリングしてください。ページネータ インスタンスの

      links メソッドを呼び出すときは、最初の引数としてビュー名を渡します。

      {{ $paginator->links('view.name') }}
      // Passing data to the view...
      {{ $paginator->links('view.name', ['foo' => 'bar']) }}

      ページ分割されたビューをカスタマイズする最も簡単な方法は、

      vendor を使用することです。 :publish コマンドは、これらを resources/views/vendor フォルダーに出力します。

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

      このコマンドは、それらを

      resources/views/vendor/pagination## に出力します。 # フォルダー これらのビューを配置します。このフォルダーに組み込まれている bootstrap-4.blade.php ファイルは、デフォルトのページング ビューを提供します。このファイルを編集して、ページネーション HTML を変更できます。 別のファイルをデフォルトのページング ビューとして定義する場合は、

      AppServiceProvider# のページャーの

      defaultView メソッドと defaultSimpleView メソッドを使用する必要があります。 ##:

      use Illuminate\Pagination\Paginator;public function boot(){
          Paginator::defaultView('view-name');    
          Paginator::defaultSimpleView('view-name');
      }

      ##

      ページャー インスタンス メソッド

      各ページャー インスタンスには、追加のページング情報を取得するための次のメソッドが用意されています::

      #メソッド説明##$results->count()$results->currentPage()$results->firstItem()$results->getOptions()$results->getUrlRange($start, $end)$results->hasMorePages()$results->lastItem()$results->lastPage()simplePaginate$results->nextPageUrl()$results->onFirstPage()$results->perPage()$results->previousPageUrl()$results->total()simplePaginate
      現在のページのデータ量を取得します。
      現在のページ番号を取得します。
      結果セット内の最初のデータの結果番号を取得します。
      ポケットベルのオプションを取得します。
      ページ分割された URL 範囲を作成します。
      複数のページがあるかどうか。
      結果セット内の最後のデータ部分の結果番号を取得します。
      最後のページのページ番号を取得します ( では無効です) )。
      次のページの URL を取得します。
      最初のページかどうか。
      ページごとのデータ項目の数。
      前のページの URL を取得します。
      合計データ ( では無効)。
      $results->url($page)指定されたページの URL を取得します。
      この記事は、LearnKu.com Web サイトで初めて公開されました。