Laravel添加API资源仅在使用集合时添加属性



当我们使用集合时,我想将attribut添加到资源中!

PostResource:

public function toArray($request)
{
return [
'id' => $this->id,
'content' => $this->content,
'user' => new UserResource($this->whenLoaded('user')),
];
}

PostCollection:

public function toArray($request)
{
return [
'data' => $this->collection
];
}

在控制器中:

$posts =  Post::with('user')->get();
return  PostResource::collection($posts);

返回

["data": { ["id":1 , "content" : "some test" , "users": [....] }]

我们想添加另一个属性(短文本(

["data": { ["id":1 , "content" : "some test" , "users": [....] , "short_text" : substr($this->content",0,255) }]

怎么做?

我们不想编辑PostResource,因为short_text将包含在每个请求中。

当我们只使用集合时,我们不希望包含它!

所以:

localhost/api/posts

返回

["data": { ["id":1 , "content" : "some test" , "users": [....] , "short_text" : substr($this->content",0,255) }]

localhost/api/post/1

返回:

["id":1 , "content" : "some test" , "users": [....] ]

没有的short_text属性

正如文档中所述,您可以这样做:

class PostCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => $this->collection,
'short_text' => 'my-short-text',
];
}
}

当然,你可以随心所欲地塑造它,使其具有所需的结构。

最新更新