Laravel 手動建立分頁返回物件結果集

qf-Z發表於2019-12-28

由於使用 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
    }

Laravel的限制條數再分頁

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

相關文章