Laravel 5.5 API resources for collections (standalone data)

前端 未结 3 1648
悲&欢浪女
悲&欢浪女 2020-12-14 10:15

I was wondering if it is possible to define different data for item resource and collection resource.

For collection I only want to send [\'id\', \'title\', \

3条回答
  •  没有蜡笔的小新
    2020-12-14 10:29

    The Resource class has a collection method on it. You can return that as the parameter input to your ResourceCollection, and then specify your transformations on the collection.

    Controller:

    class PageController extends Controller
    {
        public function index()
        {
            return new PageResourceCollection(PageResource::collection(Page::all()));
        }
    
        public function show(Page $page)
        {
            return new PageResource($page);
        }
    }
    

    Resources:

    class PageResource extends Resource
    {
        public function toArray($request)
        {
            return [
                'id' => $this->id,
                'title' => $this->title,
                'slug' => $this->slug,
                'user' => [
                    'id' => $this->user->id,
                    'name' => $this->user->name,
                    'email' => $this->user->email,
                ],
            ];
        }
    }
    
    class PageResourceCollection extends ResourceCollection
    {
        public function toArray($request)
        {
            return [
                'data' => $this->collection->transform(function($page){
                    return [
                        'id' => $page->id,
                        'title' => $page->title,
                        'slug' => $page->slug,
                    ];
                }),
            ];
        }
    }
    

提交回复
热议问题