可以使用兩個查詢參數中的一個或兩個來實現分頁:
-
limt
返回多少項目 -
marker
指定從哪一個ID開始
例如:
HTTP 動詞 | 請求網址 | 說明 |
GET | /api/animal?limit=10 | 查詢10筆動物資料 |
GET | /api/animal?limit=20&marker=3 | 查詢從ID 3 開始的20筆資料! |
Codeing Time
AnimalController
public function index(Request $request)
{
// 設定預設值
$marker = $request->marker==null ? 1:$request->marker;
$limit = $request->limit==null ? 10:$request->limit;
$animals = Animal::orderBy('id', 'asc')
->where('id', '>=', $marker)
->limit($limit)
->get();
return response(['animals' => $animals], Response::HTTP_OK);
}
先設定系統預設值 limit
預設10筆,marker
預設值為1,所以未填寫任何查詢參數也是只會回傳10筆資料,並且由ID1的內容開始讀取。
我的animals資料表目前只有兩筆資料如下所示
{
"animals": [
{
"id": 2,
"type_id": 1,
"name": "大黑",
"birthday": "2017-01-01",
"area": "台北",
"fix": 1,
"description": "非常可愛,非常任命的一隻狗",
"personality": "認養他準沒錯",
"created_at": "2019-08-24 16:55:29",
"updated_at": "2019-08-24 16:55:29"
},
{
"id": 3,
"type_id": 1,
"name": "黑熊",
"birthday": "2017-01-01",
"area": "台北",
"fix": 1,
"description": "黑狗,胸前有白毛!宛如台灣黑熊",
"personality": "非常親人!很可愛~",
"created_at": "2019-08-24 17:05:07",
"updated_at": "2019-08-24 17:05:07"
}
]
}
所以使用者請求
GET /api/animal?marker=3&limit=10
表示找id大於等於3的資料,並且只要顯示10筆資料。(不過我的資料表中大於等於3只有一筆資料,所以只會顯示一筆)
回應資料如下
{
"animals": [
{
"id": 3,
"type_id": 1,
"name": "黑熊",
"birthday": "2017-01-01",
"area": "台北",
"fix": 1,
"description": "黑狗,胸前有白毛!宛如台灣黑熊",
"personality": "非常親人!很可愛~",
"created_at": "2019-08-24 17:05:07",
"updated_at": "2019-08-24 17:05:07"
}
]
}
分頁
把剛剛的程式修改一下 原本 limit()、get() 修改為 paginate($limit) 程式碼完成如下所示
public function index(Request $request)
{
// 設定預設值
$marker = $request->marker==null ? 1:$request->marker;
$limit = $request->limit==null ? 10:$request->limit;
$animals = Animal::orderBy('id', 'asc')
->where('id', '>=', $marker)
->paginate($limit);
return response($animals, Response::HTTP_OK);
}
回應json結果
{
"current_page": 1,
"data": [
{
"id": 3,
"type_id": 1,
"name": "黑熊",
"birthday": "2017-01-01",
"area": "台北",
"fix": 1,
"description": "黑狗,胸前有白毛!宛如台灣黑熊",
"personality": "非常親人!很可愛~",
"created_at": "2019-08-24 17:05:07",
"updated_at": "2019-08-24 17:05:07"
}
],
"first_page_url": "http://127.0.0.1:8000/api/animal?page=1",
"from": 1,
"last_page": 1,
"last_page_url": "http://127.0.0.1:8000/api/animal?page=1",
"next_page_url": null,
"path": "http://127.0.0.1:8000/api/animal",
"per_page": "1",
"prev_page_url": null,
"to": 1,
"total": 1
}
Laravel 內建的查詢方法 paginate 真的非常方便!