Laravel 限制條數後再分頁

it書童發表於2019-11-11

laravel 自帶開箱即用的分頁,使用起來如絲般順滑。預設情況下是對所有記錄進行分頁,現在我們有這樣的需求:限制使用者只能看到前 30 頁。第一想法就是用 limit 限制條數後再呼叫分頁,如:

$per_page = 15; // 每頁條數
$limit_page = 30; // 限制總頁數
$data = Article::orderBy('id', 'desc')->limit($per_page * $limit_page)->paginate($per_page);

此種寫法並不能生效,因為 paginate 方法中內建的 limit 會替換掉我們的 limit

雖然我們可以根據文件,手動呼叫分頁的相關方法,自己擼一個分頁。但這種實現方式太繁瑣,相當於造輪子。我們可以切換一下思維來解決:

  • 取出要展示的條數的最小 id

  • 在總記錄中設定 id 大於上一條件得到的最小 id

即,用 where 替換 limit 限制總條數

$last_id = Article::orderBy('id', 'desc')
    ->limit($per_page * $limit_page)
    ->pluck('id')
    ->sort()
    ->first();
$data = Article::orderBy('id', 'desc')
    ->where('id', '>', $last_id)
    ->paginate($per_page);

原文 https://www.itshutong.com/354.html

本作品採用《CC 協議》,轉載必須註明作者和本文連結
it書童

相關文章