ホームページ  >  記事  >  バックエンド開発  >  Laravel は配列のページネーションを手動で作成します

Laravel は配列のページネーションを手動で作成します

不言
不言オリジナル
2018-06-08 09:11:352838ブラウズ

この記事では、Laravel で配列ページングを手動で作成する実装コードを主に紹介します。編集者がそれを参考にさせていただきます。

この記事では、laravel で配列ページングを手動で作成する実装コードを紹介し、詳細は次のとおりです。

laravelページング関数:

データをページ分割するにはいくつかの方法があります。最も簡単な方法は、Query Builder または Eloquent Query で paginate または simplePaginate メソッドを使用することです。

paginate の使用法は次のとおりです:

//控制器中
$users = DB::table('users')->paginate(15);
return view('user.index', ['users' => $users]);

//视图中
{{ $users->links() }}

効果は次のとおりです:

「前のページ」 「1」「 2」「3」「次のページ」

simplePaginate の使用法は次のとおりです。

//控制器中
$users = User::where('votes', '>', 100)->simplePaginate(15);
return view('user.index', compact('users'));

//视图中
{{ $users->links() }}

効果は次のとおりです。次のようになります。

「前のページ」「次のページ」

注:

  1. ページ分割されたビューの単純な「次のページ」 「ページ」および「前のページ」リンク。つまり、各ページ番号のリンクを表示する必要はありません。より効率的なクエリを実行するには、simplePaginate メソッドを使用することをお勧めします。

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

$dataA と $dataB はデータベースから取得された 2 つの異なるデータ セットであり、これらを同時にビューに割り当てる必要がある場合があります。時刻を指定してページング表示を行うのですが、この場合はどうすればよいでしょうか?

#この場合、laravel 配列ページングを使用できます。

実は、laravelのドキュメントには、ページングクラスを使用してページネーションする方法がすでに書かれていますが、詳細な説明はありません。

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

ページング インスタンスを手動で作成し、最終的に配列型の結果を取得する場合は、ニーズに応じて IlluminatePaginationPaginator または IlluminatePaginationLengthAwarePaginator インスタンスを作成できます。 。

詳細については、IlluminatePaginationLengthAwarePaginator のコードを参照してください:

public function __construct($items, $total, $perPage, $currentPage = null, array $options = [])
 {
  foreach ($options as $key => $value) {
   $this->{$key} = $value;
  }

  $this->total = $total;
  $this->perPage = $perPage;
  $this->lastPage = max((int) ceil($total / $perPage), 1);
  $this->path = $this->path !== '/' ? rtrim($this->path, '/') : $this->path;
  $this->currentPage = $this->setCurrentPage($currentPage, $this->pageName);
  $this->items = $items instanceof Collection ? $items : Collection::make($items);
 }

具体的な実装コードは次のとおりです:

//控制器中
public function index(LiveService $liveService, Request $request)
 {
  //数据A
  $dataA = User::where('status', 1)->get()->toArray();
  //数据B
  $dataB = User::where('status', 2)->get()->toArray();
  $data = array_merge($dataA, $dataB);
  //当前页数 默认1
  $page = $request->page ?: 1;
  //每页的条数
  $perPage = 4;
  //计算每页分页的初始位置
  $offset = ($page * $perPage) - $perPage;
   //实例化LengthAwarePaginator类,并传入对应的参数
  $data = new LengthAwarePaginator(array_slice($data, $offset, $perPage, true), count($data), $perPage,
   $page, ['path' => $request->url(), 'query' => $request->query()]);
  return view('admin.users.index', compact('data'));
 }

//视图中
{{ $data->links() }}

上記は基本的に配列のページングを完了します。一般的なプロセスは、コントローラーが現在のページ番号を取得し、LengthAwarePaginator クラスをインスタンス化し、必要なパラメーターを渡すことです。各ページに表示するデータをarray_slice()メソッドで取得します。

上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

Laravel プログラム アーキテクチャ設計におけるアクション クラスの使用

##

以上がLaravel は配列のページネーションを手動で作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。