曾經我對 Laravel 分頁的方法名稱感到疑惑,我曾經以為 Eloquent’s resource 表示單一筆資料,那多筆資料就是 resources 囉! ((翻車翻的很徹底))
直至我問工作室的 M 同學,為什麼 Eloquent’s resource 的複數,你會覺得是 collection?
M 同學答: 多筆資料表示是集合,方法名稱 collection 蠻合理。
從此,我就記成單筆資料 resource
; 多筆資料 collection
繼上一篇末尾得知,使用 Eloquent’s resource 遇到多筆資料輸出,可以使用 Eloquent’s resource 的 static function collection()
,如:
<?php
Route::get('product', function(){
$allProduct = Product::all();
return ProductResource::collection($allProduct);
}
paginate()
,如:<?php
Route::get('product', function(){
// 一頁顯示 4 筆資料
$pageProduct = Product::paginate(4);
return $pageProduct;
}
collection()
+ paginate()
,如:<?php
Route::get('product', function(){
// 一頁顯示 4 筆資料
$pageProduct = Product::paginate(4);
return ProductResource::collection($pageProduct);
}
{
"data": [
{
"id": 1,
"customer_id": 1,
"product_number": "230626000001"
},
{
"id": 2,
"customer_id": 1,
"product_number": "230626000002"
},
{
"id": 3,
"customer_id": 1,
"product_number": "230626000003"
},
{
"id": 4,
"customer_id": 3,
"product_number": "230626000004"
}
],
"links": {
"first": "http://127.0.0.1:8001/v1/product?page=1",
"last": "http://127.0.0.1:8001/v1/product?page=2",
"prev": null,
"next": "http://127.0.0.1:8001/v1/product?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 2,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "http://127.0.0.1:8001/v1/product?page=1",
"label": "1",
"active": true
},
{
"url": "http://127.0.0.1:8001/v1/product?page=2",
"label": "2",
"active": false
},
{
"url": "http://127.0.0.1:8001/v1/product?page=2",
"label": "Next »",
"active": false
}
],
"path": "http://127.0.0.1:8001/v1/product",
"per_page": 4,
"to": 4,
"total": 8
}
}
建立 Resource Collection: php artisan make:resource ProductCollection
make()
+ paginate()
,如:<?php
Route::get('product', function(){
// 一頁顯示 4 筆資料
$pageProduct = Product::paginate(4);
return ProductCollection::make($pageProduct);
}
輸出結果:
collection()
+ paginate()
』,不過 Eloquent’s resource 和 Eloquent’s resource collection 底層是不太相同的,有興趣可以自己追一下!ps. 兩者不同於,ProductCollection 為什麼可以做到分頁的效果,ProductCollection 多了 ProductResource 什麼東東?! LengthAwarePaginator