LoginSignup
0
0

More than 1 year has passed since last update.

[Laravel8.x]APIResourceCollectionのResourceをカスタマイズする方法

Last updated at Posted at 2021-07-30

公式ドキュメント

Laravel 8.x Eloquent:APIリソース

やりたいこと

API ResourceのCollectionで特定Resourceでパスワードなど不要な情報やEnumを文字列変換したデータを取得したい。
公式にはやり方が記載されていなかったので、実装例を残しておきます。

Collectionの取得したいデータイメージ
{
    "data": [
        {
            "id": 1,
            "name": "佐々木",
            "status": "本登録",
        },
        {
            "id": 2,
            "name": "嘉納",
            "status": "退会",
        },
        {
            "id": 3,
            "name": "亜門",
            "status": "仮登録",
        },
    ],
    "count": 3,
    "statuses": {"1": "仮登録", "2": "本登録", "3": "退会"}
}

サンプルコード

Collectionクラス

実装する時のポイント
デフォルトだと$this->collectionとなっている。
指定したいResourceクラスのcollectionを使って呼び出す。
UserResource::collection($this->collection)

UserCollection
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class UserCollection extends ResourceCollection
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'data' => UserResource::collection($this->collection),
            'count' => $this->collection->count(),
            'statuses' => UserStatusEnum::values(),
        ];
    }
}

Resourceクラス

実装する時のポイント

$this->パラメータ名を指定して値が取得できます。
コード値の文字列変換や、必要なパラメータのみを定義することが出来ます。

UserResource
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'status' => UserStatusEnum::description($this->status),
        ];
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0