[英]How does Laravel's pagination work exactly?
我需要澄清Laravel的分頁器在后台的工作方式:假設我有一個包含1000行的表,並使用$results = Model::paginate(100);
如果我理解正確,Eloquent將從表中帶回包含所有行(1000)的集合,將其切成較小的100行集合,並將分頁按鈕數據附加到它們。 現在, $results
包含Page 1
集合和按鈕的分頁數據。 我的問題是:當我按Page 2
按鈕時在后台會發生什么? Eloquent會再次查詢數據庫,再次檢索整個1000行集合,對其進行切片並返回Page 2集合嗎,或者它可用於我先前的請求已檢索回的集合? 還是Eloquent的::paginate(100)
使用限制查詢數據庫? 就像select * from table limit 100
一樣?
該頁面可能包含所有信息: https : //laravel.com/docs/5.8/pagination
查看Illuminate\\Database\\Eloquent\\Builder
Eloquent Illuminate\\Database\\Eloquent\\Builder
類(Laravel 5.8):
/**
* Paginate the given query.
*
* @param int $perPage
* @param array $columns
* @param string $pageName
* @param int|null $page
* @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
*
* @throws \InvalidArgumentException
*/
public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
您可以得出:
page
url參數(即example.com?page=2
)將被自動考慮並顯示正確的頁面。 您可以使用$pageName
修改此屬性的名稱。 頁面默認為1。 paginate(100)
且頁面為2時, 查詢將使用LIMIT 100 OFFSET 100
類的內容來獲取記錄101-200 。 因此,是的,它只檢索需要查看的記錄,因此非常有效。 附帶說明:有一些解決方案可對分頁的Collection
實例進行分頁,該解決方案的效率較低,因為您最終每次都會查詢100條記錄,並將100個項目的集合划分為10個頁面(因此不使用90個項目)。 但是,通常不需要這樣做,除非您必須手動組成集合(例如,包含不同類型的Eloquent模型的集合)。
另外,您可能需要使用
https://packagist.org/packages/barryvdh/laravel-debugbar
composer require barryvdh/laravel-debugbar
它使您可以輕松查看查詢和許多其他應用程序內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.