Maison >développement back-end >tutoriel php >Laravel crée manuellement la pagination du tableau

Laravel crée manuellement la pagination du tableau

不言
不言original
2018-06-08 09:11:352884parcourir

Cet article présente principalement le code d'implémentation de la création manuelle de pagination de tableaux dans Laravel. L'éditeur pense que c'est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence.

Cet article présente le code d'implémentation de Laravel pour créer manuellement une pagination de tableau et le partage avec tout le monde. Les détails sont les suivants :

. Fonction de pagination Laravel :

Il existe plusieurs façons de paginer des données. Le plus simple consiste à utiliser la méthode paginate ou simplePaginate dans le Query Builder ou Eloquent Query.

paginate s'utilise comme suit :

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

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

L'effet est le suivant :

"Précédent page" "1 ""2""3" "Page suivante"

L'utilisation de simplePaginate est la suivante :

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

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

L'effet est le suivant :

「Page précédente」「Page suivante」

Remarque :

  1. Si il vous suffit d'afficher en mode paginé. Les liens simples "page suivante" et "page précédente" n'ont pas besoin d'afficher des liens pour chaque numéro de page. Il est recommandé d'utiliser la méthode simplePaginate pour effectuer des requêtes plus efficaces.

  2. Actuellement, Laravel ne peut pas effectuer efficacement les opérations de pagination à l'aide de l'instruction groupBy. Si vous devez utiliser groupBy dans un jeu de résultats paginé, il est recommandé d'interroger la base de données et de créer le paginateur manuellement.

Parfois, vous pouvez rencontrer cette situation. $dataA et $dataB sont deux ensembles de données différents extraits de la base de données. Vous devez attribuer $dataA et $dataB en même temps. temps. Et effectuer un affichage de pagination, que devons-nous faire dans ce cas ?

Dans ce cas, la pagination du tableau laravel peut être utilisée.

En fait, dans la documentation de Laravel, il est déjà écrit comment utiliser la classe de pagination pour paginer, mais il n'y a pas d'explication détaillée.

Créer manuellement une pagination

Si vous souhaitez créer manuellement une instance de pagination et enfin obtenir un résultat de type tableau, vous pouvez créer une instance IlluminatePaginationPaginator ou IlluminatePaginationLengthAwarePaginator selon vos besoins .

Pour plus de détails, veuillez consulter ce code dans 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);
 }

Ce qui suit est le code d'implémentation spécifique :

//控制器中
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() }}

Ce qui précède complète essentiellement la pagination du tableau. Le processus général est que le contrôleur obtient le numéro de page actuel, instancie la classe LengthAwarePaginator et transmet les paramètres nécessaires en fonction. au numéro de chaque page Le nombre d'éléments utilise la méthode array_slice() pour obtenir les données à afficher sur chaque page.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

L'utilisation de classes d'action dans la conception de l'architecture de programmation Laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn