后端數據(Eloquent 模型)分頁
事先建立好Eloquent 模型和Controller 還有 前台的View。可以參考我之前的文章:Laravel建站03--建立前台文章列表和文章詳情
在controller 里獲取分頁數據:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Article;
use Illuminate\Support\Facades\Cache;
use Carbon\Carbon;
class ArticleController extends Controller
{
public function index()
{
//方式一:可以用DB facade 進行接近原生SQL方式查詢,也可以完全用SQL語句,如:$users = DB::select('select * from users where active = 1');。不過我得這樣不好
// $articles = DB::table('articles')
// ->select('id', 'body', 'title')
// ->orderBy('id', 'desc')
// ->paginate(5); //分頁的關鍵,這里是可以顯示頁碼的分頁,也可以用簡單分頁,只顯示上一頁,下一頁。數據量大時,簡單分頁會更快
//方式二:模型直接分頁
//$articles = Article::paginate(5);
//方式三:模型簡單分頁
//$articles = Article::simplePaginate(5);
//在方式二的基礎上增加排序規則
//$articles = Article::orderBy('id', 'desc')->paginate(5);
//在方式三的基礎上增加查詢的列
$articles = Article::select('id', 'title')->orderBy('id', 'desc')->paginate(5);
return view('welcome', ['articles' => $articles]);
}
}
前台顯示分頁結果
- 在Laravel中顯示分頁HTML還是很簡單的。只用一句話就可以搞定:
{{ $articles->links() }}
- 如果想在前台分頁連接中附加參數,可以在controller綁定view中增加參數:
return view('welcome', ['articles' => $articles, 'params1' => 'a', 'params2'=>'b']);
然后把前台的代碼修改為:
{{ $articles->appends(['p1' => $params1, 'p2' => $params2])->links() }}
這樣前台分頁的地址就從?page=2 變成?p1=a&p2=b&page=2 了。
- 自定義分頁HTML
想自定義分頁HTML,可以修改Laravel分頁視圖:vendor/laravel/framework/src/Illuminate/Pagination/resources/views/ 文件夾下的視圖文件
