新增的產品、類別資料都是第一手資料,但通常呈現給使用者或前端會是「篩選過的資料」。
那該如何呈現「篩選過的資料」?
可以建立一個 API Resource 將資料進行包裝。
{
"id": 1,
"type_id": 1,
"product_name": "杏仁瓦片",
"product_description": "12入,很好吃,送禮自用兩相宜!",
"price": 220,
"created_at": "2024-10-06 17:42",
"updated_at": "2024-10-06 17:42"
}
查詢產品資料時,需要將類別資料一起顯示出來。
但我會希望呈現給使用者的是只有:
所以我會將以下資料隱藏:
使用 artisan 指令來建立:
php artisan make:resource TypeResource
php artisan make:resource ProductResource
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class TypeResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'name' => $this->name,
];
}
}
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class ProductResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'type' => new TypeResource($this->type),
'product_name' => $this->product_name,
'product_description' => $this->product_description,
'price' => $this->price,
];
}
}
public function show(Product $product)
{
// 回傳特定商品資料
return response(new ProductResource($product), Response::HTTP_OK);
}
{
"id": 1,
"type": {
"id": 1,
"name": "甜點"
},
"product_name": "杏仁瓦片",
"product_description": "12入,很好吃,送禮自用兩相宜!",
"price": 220
}
僅顯示已篩選過的資料,表示測試成功!