由於使用 Eloquent ORM 取出的資料不滿足要求,需要進行一定的其他操作,選擇手動建立分頁。
Laravel 文件 提示在手動建立分頁例項時,需要人為「切割」傳遞給分頁例項的結果陣列。如果你對此沒有把握,請參考 PHP 的 array_slice 方法。
一開始的寫法如下:
$rooms = Room::get();
$offset = ($page * $per_page) - $per_page;
$item = array_slice($rooms, ($page - 1) * $per_page, $per_page); // 分割成陣列
$total = count($rooms);
$rooms = new LengthAwarePaginator($item, $total, $per_page, $page, ['path' => $request->url(), 'query' => $request->query()]);
但是我使用了 Laravel 內建的 API 資源 ,需要返回的是物件結果集,經過一番 Google ,發現有位老鐵使用集合中的 slice()
方法解決了這個問題,特此記錄。
$rooms = Room::get();
$offset = ($page * $per_page) - $per_page;
$total = count($rooms);
$rooms = new LengthAwarePaginator($rooms->slice($offset, $per_page), $total, $per_page, $page, ['path' => $request->url(), 'query' => $request->query()]);
return RoomResource::collection($rooms);
{
"data": [
{
"id": 132,
"room_name": 測試房間",
"room_style": "六房一廳",
"today_price": 0,
"head_pic": "",
"room_comment_score": "5.0"
}
],
"links": {
"first": "http://weapp.test/room-search?page=1",
"last": "http://weapp.test/room-search?page=4",
"prev": null,
"next": "http://weapp.test/room-search?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 4,
"path": "http://weapp.test/room-search",
"per_page": 10,
"to": 10,
"total": 34
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結